2014-01-21 50 views
9

下面的代碼是否便於惰性初始化
或者只要有人包含頭文件(或者甚至在程序啓動時)就會創建singletonInstance使用單例模式進行懶惰初始化

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

    public: 

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

回答

11

這就是所謂的Meyers singleton,他們懶惰實例化。

有一些注意事項:

  • 的單身人士將在程序在其創建相反的順序最終被破壞,所以不可能有依賴性問題。
  • C++ 03不保證在多線程環境中不受競爭條件的影響。
+0

感謝您的參考! – cacau

9

SingletonClass構造不會早於somenone稱爲調用Instance()方法。

因此是的,它有助於延遲初始化。

+0

有趣!會想到相反的 - 即靜態成員實例是*永遠*那裏..! – cacau

+4

@cacau:代碼中沒有靜態數據成員。 –

+0

@cacau據我所知,在語言標準中,編譯器必須實現這種行爲。我應該爲你提一提嗎? –