单列模式
只包含一个被称为单例模式的特殊类。
目的:保证一个类仅有一个实例,并提供一个访问它全局的访问点。
该实例被所有程序模块共享。
懒汉模式
第一个用到的类实例的时候才会回去实例化。时间换空间
class singleton
{
public:
static singleton *GetInstance()
{
if(Instance == NULL)
{
Instance = new singleton();
}
return Instance;
}
private:
singleton(); //私有构造函数
static singleton *Instance;
};
缺点:多线程情况下,两个线程同时获取到GetInstance方法时,会同时判断Instance 为空,则两个线程会同时构造一个实例给Instance。
改进(双重锁检验)
只要第一次创建时进行加锁,当Instance不为空时,就不需要加锁。
class singleton
{
public:
static singleton* GetInstance()
{
if(Instance == NULL)
{
Lock();
if(Instance == NULL)
{
Instance = new singleton();
}
UnLock();
}
return Instance;
}
private:
singleton(); //私有构造函数
static singleton *Instance;
}
饿汉模式
单例类定义的时候就去实例化。空间换时间
class singleton
{
public:
static singleton * GetInstance()
{
static singleton Instance;
return &Instance;
}
private:
singleton();
};