设计模式之单例模式

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;
};





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值