ここでスレッドセーフなシングルトンパターンについて読んでいます:
http://en.wikipedia.org/wiki/Singleton_pattern#C.2B.2B_.28using_pthreads.29
そして一番下には、Windows では利用できない pthread_once を使用することが唯一の安全な方法であると書かれています。
それがスレッドセーフな初期化を保証する唯一の方法ですか?
SOでこのスレッドを読みました:
そして、アトミックOSレベルのスワップと比較機能を暗示しているようです.Windowsでは次のようになります。
http://msdn.microsoft.com/en-us/library/ms683568.aspx
これは私が望むことをすることができますか?
編集:遅延初期化を行い、クラスのインスタンスが 1 つだけになるようにします。
別のサイトの誰かが名前空間内でグローバルを使用することに言及しました (そして彼はシングルトンをアンチパターンと説明しました) - どうすればそれが「アンチパターン」になるのでしょうか?
受け入れられた回答: Visual Studio 2008 を使用しているため、 Josh の回答
を受け入れました- NB: 今後の読者のために、このコンパイラ (または 2005) を使用していない場合 - 受け入れられた回答を使用しないでください!!
編集: コードは return ステートメントを除いて正常に動作します - エラーが発生します: error C2440: 'return' : cannot convert from 'volatile Singleton *' to 'Singleton *'. 戻り値を volatile Singleton * に変更する必要がありますか?
編集:どうやら const_cast<> は volatile 修飾子を削除します。ジョシュに再び感謝します。