1. 程式人生 > >劍指offer:面試題二:單例模式的實現(使用C++語言)

劍指offer:面試題二:單例模式的實現(使用C++語言)

#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cstdlib>
using namespace std;

//實現Singleton模式
//設計一個類,我們只能生成該類的一個例項。
class Singleton
{
      public:   
           static Singleton * getInstance()
           {
              if(instance == NULL)
                   instance = new Singleton();
              return instance;
           } 
      private:
            static Singleton *instance;
            Singleton()
            {
            }
}; 
Singleton * Singleton::instance; //注意!

int main()
{
    Singleton *s1 =  Singleton::getInstance();
    cout << hex << s1 << endl;
    Singleton *s2 =  Singleton::getInstance();
    cout << hex << s2 << endl;
    system("pause");
}

注意程式碼中註釋的地方。

對於C++語言,在類中宣告的靜態變數,需要在外部再一次定義。對於靜態變數,類內部的那個叫宣告,C++要求所有實體在任何翻譯單元內必須有且只有一個定義,所以得在外部定義。類外定義一次這樣才會分配記憶體。連結才不會出錯。

如果沒有註釋前面的那句,程式碼執行就會報連結錯誤。

執行結果:


靜態成員變數為什麼要在類外部再定義

c++中靜態成員變數為什麼要在類外部再定義

c++中靜態成員變數為什麼要在類外部再定義