ich die Qt-Codierung Konventionen docs las und kam auf den folgenden Absatz:C++ statische globale nicht-POD: Theorie und Praxis
Alles, was einen Konstruktor hat oder braucht Code auszuführen initialisiert werden kann nicht verwendet werden als globales Objekt im Bibliothekscode, da es nicht definiert ist, wann dieser Konstruktor/Code ausgeführt wird (bei der ersten Verwendung, beim Laden der Bibliothek, vor main() oder gar nicht). Selbst wenn die Ausführungszeit des Initialisierers für gemeinsam genutzte Bibliotheken definiert ist, werden Sie Probleme bekommen, wenn Sie diesen Code in ein Plugin verschieben oder wenn die Bibliothek statisch kompiliert wird.
Ich weiß, was die theory sagt, aber ich verstehe nicht den "überhaupt nicht" -Teil. Manchmal verwende ich globale Nicht-POD-Const-Statik (z. B. QString) und es ist mir nie aufgefallen, dass sie nicht initialisiert werden ... Ist das spezifisch für gemeinsam genutzte Objekte/DLLs? Tritt dies nur bei kaputten Compilern auf?
Was halten Sie von dieser Regel?
Ihr QString wird möglicherweise nicht initialisiert, wenn Sie sie nicht verwenden. Aber wenn Sie sie verwenden, werden sie initialisiert. Auch wenn dies kurz vor dem Gebrauch ist (also kurz bevor das Objekt aufgerufen wird). –