Meyers Singletonは、local static variable initialization is atomicという事実に依存しています。C++は= atomicで静的変数を初期化していますか?
私は同様のものを構築していますが、シングルトンを実際にいくつかの派生型の1つにしたいと考えています。基底クラスgetInstance()
メソッドは、適切な型を返すファクトリを呼び出す必要があります。
私の最初のアイデアは、N3337の
static Foo *instance = FooFactory(...);
8.5p2が、これは厳密に初期化していない初期化と代入であると私は文全体がアトミックであることを意味することを解釈することを示しているように思われます。これは正しいです?
ていない場合は声明
static Foo *instance(FooFactory(...));
は違うのでしょうか? C++ 11以降> 8.5.p2
スレッドを作成する静的な初期化が見られる場合、私は直ちにそれを書いた開発者に関する経営陣の懸念を提起するでしょう:) – SergeyA
DllMainの中のほとんど何でも実行しているWindows DLLについては、特にエキサイティングです。静的initを実行する)、静的ローダーロックのデッドロックにつながる可能性があります:-) –