回顾一下单例模式,下面是现代最简洁的写法,且都保证了线程安全
饿汉式(线程安全)
程序启动时,实例就开始创建了,因此是线程安全的。
class Singleton{
private:
Singleton(){}
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
static Singleton instance;//类内声明
public:
static Singleton& getInstance(){
return instance;
}
}
Singleton Singleton::instance;
懒汉式(线程安全)
第一次调用instance函数时,实例才被创建出来,全局访问节点使用静态局部变量,保证了实例初始化一次且C++11规定静态局部变量是天然线程安全的
class Singleton{
private:
Singleton(){}
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
public:
Singleton& getInstance(){
static Singleton instance;
return instance;
}
}