跳转至

单例模式

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

#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.