读书人

关于单例模式,该怎么解决

发布时间: 2012-09-02 21:00:34 作者: rapoo

关于单例模式
class Singleton
{
private:
int test;
static Singleton *instance;//为什么设置为静态??
Singleton(){cout<<"new"<<endl;test=0;}
~Singleton(){cout<<"delete"<<endl;}

public:
static Singleton *GetInstance()//为什么设置为静态??
{
static Singleton singleton;
return &singleton;
}
void setvalue(int v) { test=v; }
int getvalue() { return test; }
};

int main()
{
Singleton *single1=Singleton::GetInstance();
Singleton *single2=Singleton::GetInstance();

cout<<"value 1:"<<single1->getvalue()<<endl;
single1->setvalue(100);
cout<<"value 2:"<<single2->getvalue()<<endl;

if (single2==single1)
{
cout<<"single1 == single2"<<endl;
}
return 0;
}

输出结果是:
new
value1 :0
value2 :100
single1=single2//为什么会相等啊,两个类对象相等,不是应该他们的数据成员也相等吗?
delete


[解决办法]
static Singleton *instance;//为什么设置为静态??
>> 因为静态成员(变量)是类级别的,即该类所有的对象都共享这个成员变量。其意图就是为了保证,只有一份拷贝。

static Singleton *GetInstance()//为什么设置为静态??
>> 1. 由于Singleton的构造函数是private的,所以在外部无法通过调用构造函数来创建该类的对象。
>> 2. 由于所有的静态成员都是类级别的,因此不需要构造一个具体的对象,就可以通过形如:
Singleton::GetInstance()
的方式来获取对象

比较严格的Singleton设计模式,远比楼主所给出的代码复杂。详情可以参考:
C++实现Singleton模式

读书人网 >C++

热点推荐