天天看點

C++設計模式之單例模式(Singleton)

#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
           

繼續閱讀