单例模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
#include <iostream>
#include <cassert>
class Singleton
{
public:
static Singleton& Instance() // 声明为静态类方法
{
static Singleton instance;
return instance;
}
public:
Singleton(const Singleton&) = delete; // 拷贝操作禁止
Singleton(Singleton&&) = delete; // 移动操作禁止
Singleton& operator=(const Singleton&) = delete; // 拷贝操作禁止
Singleton& operator=(Singleton&&) = delete; // 移动操作禁止
private:
Singleton() = default; // 防止外界创建实例
~Singleton() = default;
};
int main()
{
auto& a = Singleton::Instance();
auto& b = Singleton::Instance();
assert(&a == &b);
return 0;
}
特点:
- 延迟初始化(首次调用时创建)
- 自动线程安全:C++11起,static local variable 的初始化是线程安全的,C++11标准保证:如果多个线程试图同时初始化同一静态局部变量,则初始化严格只发生一次。
If multiple threads attempt to initialize the same static local variable concurrently, the initialization occurs exactly once.