单例模式:一个类不管创建多少次对象,永远只能得到该类型一个对象的实例。常用到的场景,比如日志模块、数据库模块。另外,单例模式下又可分为:饿汉式单例模式和懒汉式单例模式。
1、饿汉式单例模式
饿汉式单例模式:还没有获取实例对象,实例对象就已经产生了
class Singleton {
public:
static Singleton* getInstance() { // #3 获取类的唯一实例对象的接口方法
return &instance;
}
private:
static Singleton instance; // #2 定义一个唯一的类的实例对象
Singleton() { // #1 构造函数私有化
}
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
};
Singleton Singleton::instance;
2、懒汉式单例模式
懒汉式单例模式:唯一的实例对象,直到第一次获取它的时候,才产生
class Singleton {
public:
static Singleton* getInstance() { // #3 获取类的唯一实例对象的接口方法
// g++ -o run 单例模式.cpp -g gdb run
// 函数静态局部变量的初始化,在汇编指令上已经自动添加线程互斥指令了,因此是线程安全的
static Singleton instance; // #2 定义一个唯一的类的实例对象
return &instance;
}
private:
Singleton() { // #1 构造函数私有化
}
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
};