質問
近いうちに記事を投稿します 私のブログ, しかし、最初に何も見逃していないかを確認したいと思います。
私が見逃した例を見つけたので、私の投稿で引用します。
トピックは失敗したシングルトン実装です。どのような場合にできるのですか 偶然 シングルトンの複数のインスタンスを取得しますか?
これまでのところ、次のことを思いつきました。
- 最初の呼び出し時の競合状態
instance()
- 複数の DLL または DLL と実行可能ファイルへの組み込み
- シングルトンのテンプレート定義 - 実際には別のクラス
他に不足している方法はありますか?おそらく継承でしょうか?
解決
cpp ファイル内で初期化する静的インスタンス フィールドを使用する場合、一部の静的/グローバルの初期化がシングルトンのインスタンスを取得しようとすると、複数のインスタンスが取得される可能性があります (さらに動作が悪化する)。これは、コンパイル単位全体での静的初期化の順序が定義されていないためです。
他のヒント
ctor がプライベートである限り、継承は問題になりません。
ただし、コピー コンストラクターを禁止しないと、ユーザーが意図せずにシングルトン インスタンスをコピーしてしまう可能性があります。プライベートに継承 ブースト::コピー不可 これを防ぐ最も簡単な方法です。
所属していません StackOverflow