劍指offer:面試題二:單例模式的實現(使用C++語言)
阿新 • • 發佈:2019-01-28
#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++要求所有實體在任何翻譯單元內必須有且只有一個定義,所以得在外部定義。類外定義一次這樣才會分配記憶體。連結才不會出錯。
如果沒有註釋前面的那句,程式碼執行就會報連結錯誤。
執行結果: