#include<iostream>
using namespace std;
//程式在結束的時候,系統會自動析構所有的全局變量。
//事實上,系統也會析構所有的類的靜态成員變量,就像這些靜态成員也是全局變量一樣
class Singleton{
private:
int x,y;
static Singleton * instance;//靜态資料成員,它的唯一工作就是在析構函數中删除單例類的執行個體
/*
聲明為靜态時,必須類内聲明,類外初始化
若聲明為公有的,編譯階段就會配置設定單元,完成初始化(獨立存在,不屬于任何對象)
用戶端可以你直接調用,方法:類名::靜态成員名;
也可以通過靜态方法引用靜态資料成員,通過靜态方法引用靜态資料,所有對象都要
傳遞,因為用類名調用靜态方法沒有this指針指向對象
*/
//構造函數聲明為私有的,這樣就不能從别處建立該類的執行個體
Singleton(int x=0,int y=0)
{
this->x=x;
this->y=y;
}
public:
static Singleton * create()//靜态方法
{
if(instance == NULL)
instance= new Singleton(3,5);
return instance;
}
void print()
{
cout<<"x="<<x<<",y="<<y<<endl;
}
~Singleton()
{
cout<<"~Singleton"<<endl;
}
};
Singleton * Singleton ::instance = NULL;
int main(void)
{
Singleton * s1 = Singleton::create();
Singleton * s2 = Singleton::create();
s1->print();
s2->print();
if(s1 == s2)
{
cout<<"s1 == s2!"<<endl;
}
delete s1;
delete s2;
return 0;
}
這有一個總結的比較全面的部落格:http://www.jellythink.com/archives/82