单例模式定义
保证一个类仅有一个实例,并提供一个该实例的全局访问点。
从初始化的时间角度上看,单例模式分为两种,懒汉模式与饿汉模式
懒汉模式与饿汉模式
单例模式需要将构造和析构私有化,让其他用户不能调用; 例如拷贝,移动等构造函数都不能被调用
懒汉模式
class Singleton {
public:
static Singleton * GetInstance() {
//在使用的时候才会初始化单例对象,并且只初始化一次
if (_instance == nullptr) {
_instance = new Singleton();
}
return _instance;
}
private:
Singleton(){
}; //构造
~Singleton(){
};
Singleton(const Singleton &) = delete; //拷⻉ 构造
Singleton& operator=(const Singleton&) = delete;//拷贝赋值构造
Singleton(Singleton &&) = delete;//移动构造
Singleton& operator=(Singleton &&) = delete;//移动拷贝构造
static Singleton * _instance;
};
Singleton* Singleton::_instance = nullptr;//静态成员需要初始化
饿汉模式
class Singleton {
public:
static Singleton * GetInstance() {
return _instance;
}
private:
Singleton(){
}; //构造
~Singleton(){
};
Singleton(const Singleton &) = delete; //拷⻉ 构造
Singleton& operator=(const Singleton&