单例模式是一种常用的软件设计模式。
特点:
线程安全并且高效
单例类保证全局只有一个实例对象
单例类提供唯一一个实例接口
代码:
1、懒汉模式
class singleton
{
static singleton*Getinstance()//没有构造函数,只能用类名直接调用
{
if (NULL == _sinstance)//双重判断,使代码更高效
{//lock//mutex 与linux兼容
lock_guard<mutex>lock(_mtx);//RAII模式,防止new失败造成死锁,同时
if (NULL == _sinstance)
{
_sinstance = new singleton;
}
}
return _sinstance;
}
protected:
singleton():_data(0){}//把构造、拷贝构造、赋值运算符重载设为保护,避免在类外调用
singleton(const singleton&s){}
singleton&operator=(const singleton&s){}
static mutex _mtx;
static singleton*_sinstance;
int _data;
};
singleton* singleton::_sinstance = NULL;
mutex singleton::_mtx;
2、饿汉模式:
class singleton
{
public:
static singleton*Getinstance()
{
assert(_sinstance);
return _sinstance;
}
protected:
singleton() :_data(0){}
singleton(const singleton&s){}
singleton&operator=(const singleton&s){}
static singleton* _sinstance;
int _data;
};
singleton* singleton::_sinstance = new singleton;