C ++ Quiz - Singletons
-
09-06-2019 - |
Frage
Ich werde bald einen Artikel über meinen Blog sein Posting, aber ich mag ich haven überprüfen ‚t verpasst etwas zuerst.
Finden ein Beispiel ich verpasst habe, und ich werde dich auf meinen Beitrag zitieren.
Das Thema ist fehlgeschlagen Singleton-Implementierungen: In welchen Fällen können Sie versehentlich mehrere Instanzen eines Singleton bekommen
Bisher habe ich kommen mit:
- Race-Bedingung auf den ersten Aufruf
instance()
- Die Einarbeitung in mehrere DLLs oder DLL und ausführbare
- Template Definition eines Singleton - tatsächlich getrennte Klassen
Jede andere Möglichkeiten, wie ich bin fehlt? - vielleicht mit Vererbung
Lösung
Wenn Sie ein statische Instanz Feld verwenden, die Sie in Ihrer CPP-Datei zu initialisieren, können Sie mehrere Instanzen bekommen (und noch schlimmes Verhalten), wenn die Initialisierung von einigen statischen / global versucht eine Instanz Ihrer Singleton zu bekommen. Dies liegt daran, die Reihenfolge der statischen Initialisierung über Übersetzungseinheiten hinweg ist nicht definiert.
Andere Tipps
Vererbung sollte kein Problem sein, solange der Ctor privat ist.
Wenn Sie jedoch den Kopierkonstruktor nicht verbieten, können Benutzer [un] absichtlich die Singleton-Instanz kopieren. Privat erben von boost :: noncopyable ist die einfachste Art und Weise, dies zu verhindern.