2016-04-27 64 views
0

Iv'e實現了一個單例類,看起來是這樣的:Singleton類崩潰

.h文件:

class MySingleton 
{ 
public: 
    static MySingleton& GetInstance(); 

private: 
    MySingleton(); 
    virtual ~MySingleton(); 

    std::map<MyStruct, PointerToClass*, MyCompareStruct> mMyMap; 
    CRITICAL_SECTION mMyMapCriticalSection; 
}; 

CPP文件:

MySingleton& MySingleton::GetInstance() 
{ 
    static MySingleton instance; 

    return instance; 
} 

在一些運行我的代碼崩潰上實例初始化:

static MySingleton instance; 

我在執行中做錯了什麼? 我正在使用visual studio 2015

+0

它在哪裏崩潰?你的調試器告訴你什麼? –

+0

如何指定實例是否已創建?你看過[這個](https://en.wikipedia.org/wiki/Singleton_pattern)嗎? – cromod

+2

@cromod靜態只會被初始化一次,所以函數是正確的。我認爲這個問題可能在單身人士的構造者身上。 – teivaz

回答

0

在stdlib完全初始化之前,可能會崩潰的是'std :: map'初始化。

如果您的GetInstance()是從另一個靜態初始化程序調用的,則會發生這種情況。初始化的順序不是在不同的庫之間定義的。

解決的辦法是在main調用之前不構造非POD事物。

+0

我認爲這是我的問題。我在可能很早就調用的靜態函數中使用GetInstance。你如何建議解決這個問題? – rosl