单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
保证只产生一个实例,可以把构造函数声明为private,这样就保证了不能在外部定义类的对象;同时为了获取实例,类需要提供一个成员函数来获取实例,或者将一个函数声明为类的友元来获取实例;构造函数声明为private,这个类就不能够被继承了;
另一种方式,不把构造函数设置为private,但是在类中设置一个成员变量来记录类的实例个数,当实例超过一个时(也可以设置为多个),抛出异常;
上述的限制应该同时针对构造函数,拷贝构造函数和赋值操作符;
<pre name="code" class="cpp">class Singleton
{
private:
Singleton()
{
++Instancenum;
}
static int Instancenum;
Singleton(const Singleton &);
Singleton &operator = (const Singleton &);
public:
static Singleton & GetInstance()
{
static Singleton single;
return single;
}
void show()
{
cout<<"Instancenum is "<<Instancenum<<endl;
}
~Singleton()
{
--Instancenum;
}
};
int Singleton::Instancenum = 0;
int main()
{
Singleton &sinins = Singleton::GetInstance();
sinins.show();
return 0;
}