特征:
一是一个类只能有一个实例;
二是它必须自行创建这个类的实例;
三是它必须能向整个 系统提供这个实例。
class single
{
private:
static single* object;
static int num;
single(){num++;}
public:
static single* getInstance();
int getnum() {return num; }
};这个单例类的实例和构造方法都是私有地,类外不能访问。用户访问实例唯一方法只有getInstance成员函数。任何创建新的对象的操作都将失败,因为类的构造函数是私有的。
single* single::object=NULL;
int single::num=0;
single* single::getInstance()
{
if(object==NULL)
{
object=new single();
}
return object;
}可以看出,getInstance函数使用的是懒惰初始化,即当这个函数首次被访问时这个实例才被创建。
当然也可以直接在类加载时就初始化:
single* single::object=new single();
int single::num=0;
single* single::getInstance()
{
return object;
}懒惰初始化又要处理线程安全问题:就是当多个线程同时使用getInstance函数时,它们将同时创建多个实例,这不是我们的初衷。在使用的时候需要注意。
int main()
{
single* tmp1=single::getInstance();
cout << tmp1->getnum()<< endl;
single* tmp2=single::getInstance();
cout << tmp2->getnum()<< endl;
return 0;
}测试输出num始终是1。说明只创建了一个实例。