要求
一个类仅能够被实例化一次,并且提供全局的实例化访问点。
懒汉式,指的是用到该实例的时候,才初始化
饿汉式,指的是程序一开始的时候,就进行初始化
实现
基本要点
隐藏构造方法,析构函数,拷贝构造方法,拷贝赋值方法,静态的实例指针
懒汉式基本实现
class singleton
{
public:
static singleton* getinstance()
{
if(instance_==nullptr)
{
instance_=new singleton();
}
return instance_;
}
private:
singleton();
~singleton();
singleton(const singleton& other);
singleton& operator=(const singleton& other);
static singleton* instance_;
}
懒汉式线程安全型 - 双判断
class singleton
{
public:
static singleton* getinstance()
{
if(instance_==nullptr)
{
std::lock_guard<std::mutex> lock(_mutex);
if(instance_==nullptr)
{
instance_=new singleton();
}
}
return instance_;
}
private:
singleton();
~singleton();
singleton(const singleton& other);
singleton& operator=(const singleton& other);
static singleton* instance_;
}
懒汉式线程安全型-静态局部变量
初始化后,就不会重新进行初始化
线程安全,底层会自动进行阻塞
class singleton
{
public:
static singleton* getinstance()
{
static singleton instance_;
return instance_;
}
private:
singleton();
~singleton();
singleton(const singleton& other);
singleton& operator=(const singleton& other);
}
饿汉式
class singleton
{
public:
singleton* getinstance()
{
return instance_;
}
private:
singleton();
~singleton();
singleton(const singleton& other);
singleton& operator=(const singleton& other);
static singleton* instance_;
}
singleton::instance_=new singleton();