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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top