2014-01-21 18 views
9

次のコードは、遅延初期化を容易にしますか?
誰かがヘッダーを含むと(またはプログラム起動時に)すぐにsingletonInstanceが作成されますか?シングルトンパターンを使用したレイジー初期化

class SingletonClass 
{ 
    private: 
     SingletonClass(); 
     ~SingletonClass(); 

    public: 

     static const SingletonClass& Instance() 
     { 
      static SingletonClass singletonInstance; 
      return singletonInstance; 
     } 
}; 

答えて

11

これはMeyers singletonと呼ばれ、遅延インスタンス化されています。

いくつかの考慮事項があります。

  • シングルトンは、それらが作成された逆の順序でプログラムの終了時に破棄されますので、依存関係の問題が発生することができます。
  • マルチスレッド環境で競合状態を保証するものではありません。
+0

参考になりました! – cacau

9

SingletonClassコンストラクタはsomenoneがInstance()メソッドを呼び出すよりも早く呼び出されません。

したがって、遅延初期化が容易になります。

+0

興味深い!つまり、静的メンバーのインスタンスは常に*そこにあります。 – cacau

+4

@cacau:コードに静的データメンバーはありません。 –

+0

@cacau今まで私は、コンパイラがこの動作を実装しなければならないという言語標準の保証があることを覚えています。私は言及のためにあなたのためにそれを見なければならない? –

関連する問題