#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