静的 Singleton&instance() として表される Meyer のシングルトン実装は、そのシングルトン機能に関して疑問を引き起こします。
シングルトンの性質は static キーワードに由来します。ローカル変数の静的ストレージ期間は、プログラム全体でインスタンスが 1 つだけ存在することを意味します。
次の同等の疑似コード (実際の C 98 コードではありません) を考えてみましょう:
static bool __guard = false; static char __storage[sizeof(Singleton)]; Singleton& Instance() { if (!__guard ) { __guard = true; new (__storage) Singleton(); } return *reinterpret_cast<Singleton*&>(__storage); }
これは、元のコードの動作を大まかにカプセル化しています。
実際の C 11実装では、各静的に対してガード変数が使用され、スレッドのバリアとして機能します。
どちらの実装もシングルトンの整合性を強制しますが、スレッド処理とコードの複雑さが異なります。
マイヤーズ実装:
Wikipedia実装:
Meyer の実装は、静的ストレージ期間により複数のデータを保存できないため、確かにシングルトンです。インスタンス化。 2 つの実装のどちらを選択するかは、特定のアプリケーションとマルチスレッドの考慮事項によって異なります。
以上がMeyer のシングルトン実装は本当にシングルトンですか? スレッドセーフな代替実装とどう比較するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。