GOF 单例模式
class Singleton
{
public:
static Singleton * getInstance()
{
if(pInstance == NULL)
{
pInstance = new Singleton();
return pInstance;
}
}
void releaseInstance()
{
if(NULL != pInstance)
{
delete pInstance;
pInstance = NULL:
}
}
private:
Singleton Singleton(const Singleton& sg);
Singleton& operator=(const Singleton& sg);
private:
static Singleton *pInstance;
};
缺点
1.每次都会判断指针是否为空效率低
2.线程不安全(如果在执行到piInstance = new Singleton()之前线程切换到另一个线程去执行 会生成多个实例对象)
另一种单例模式
class Singleton
{
public:
Singleton getInstance()
{
static singleton sg;
return sg;
};
private:
Singleton Singleton(const Singleton& sg);
Singleton& operator=(const Singleton& sg);
};
//c++产生一个新的对象需要两步 1.分配空间 2.初始化对象
虽然能保证只产生一个实例 如果在分配空间之后线程切换 在Singleton类中的其他方法会产生差异
多线程安全的单利模式
class Singleton
{
public:
static Singleton* getInstance()
{
if(NULL == pInstance)
{
lock();
if(NULL == pInstance)
{
pInstance = new Singleton();
}
unlock();
return pInstance;
}
}
private:
static Singleton * pInstance;
};