通常而言,单例模式分为三种实现方式:
- 懒汉式:系统定义实例。
- 饿汉式:直接给用户定义一个实例,以后都是直接调用这个。
- 双重检验:通常用于多线程时线程安全的代码。
首先,展示一个错误的代码示范:(C++11)
class Singleton{
public:
static Singleton getInstance(){
if(single) return single;
else
single = new Singleton();
cout<<"ADDR: "<<&single<<endl; // 对象,用取地址符输出地址,用于比较是否为同一个实例
return single;
}
private:
static Singleton single;
Singleton()=default;
~Singleton()=default;
}
对于初学者来说,咋一看可能没觉得有问题,其实有两个严重问题,如下:
问题1:
if(single) return single
编译器会告诉你:
could not convert ‘Singleton::single’ from ‘Singleton’ to ‘bool’
一般人会认为,对