#include<iostream>
#include<string>
#include<cstdlib>
using namespace std;
/*
單例模式
存在的問題是: 如何銷燬這個類?詳情見下文參考。
*/
class singleton
{
private:
singleton(){}
// singleton *instance = new singleton(); //這種用法不對,但下一個用法則對,why?
static singleton *instance ; //類中聲明的靜態變量需要在類外在聲明一次,見2處
public:
static singleton * getinstance() //而且static 成員函數只能訪問static 變量,詳情見下文參考。
{
if(instance == NULL)
{
instance = new singleton();
}
return instance;
}
};
singleton* singleton::instance ; // 2 類中靜態變量在外聲明時不用再加 static, 詳情參考下文。
int main()
{
singleton *s1 = singleton::getinstance(); //只有聲明爲static的成員函數纔可以這樣單獨訪問,無需創建任何實例就能訪問,見參考。
singleton *s2 = singleton::getinstance();
if(s1 == s2)
cout <<"is the same object!"<< endl;
system("pause");
return 0;
}
單例模式的另一種版本 參考:點擊打開鏈接
static 變量 詳細參考: 點擊打開鏈接
特殊變量(static)初始化參考:點擊打開鏈接
論壇參考:點擊打開鏈接
總結:瞭解了static 聲明變量時需要注意的細節問題。