2016-04-27 6 views
0

Iv'e eine Singleton-Klasse implementiert, die etwa wie folgt aussieht:Singleton Klasse stürzt

h-Datei:

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

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

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

CPP-Datei:

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

    return instance; 
} 

Auf einigen Läufen meinen Code stürzt auf die Instanzinitialisierung:

static MySingleton instance; 

Mache ich etwas falsch in meiner Implementierung? Ich arbeite an Visual Studio 2015

+0

Wo stürzt es ab? Was sagt Ihr Debugger Ihnen? –

+0

Wie geben Sie an, ob eine Instanz bereits erstellt wurde? Hast du [this] (https://en.wikipedia.org/wiki/Singleton_pattern) angeschaut? – cromod

+2

@cromod statisch wird nur einmal initialisiert, damit die Funktionen korrekt sind. Ich denke, das Problem könnte beim Konstruktor eines Singleton liegen. – teivaz

Antwort

0

Was wahrscheinlich zum Absturz ist, ist die 'Std :: Map' Initialisierung, bevor Stdlib vollständig initialisiert wird.

Dies würde passieren, wenn Ihr GetInstance() von einem anderen statischen Initialisierer aufgerufen wird. Die Reihenfolge der Initialisierung ist nicht zwischen verschiedenen Bibliotheken definiert.

Die Lösung besteht darin, keine Nicht-POD-Dinge zu konstruieren, bevor main aufgerufen wird.

+0

Ich denke, das ist mein Problem. Ich verwende die GetInstance in einer statischen Funktion, die sehr früh aufgerufen werden könnte. Wie empfehlen Sie, das Problem zu beheben? – rosl

Verwandte Themen