跳至主要內容

C++11新单例写法 (静态成员 线程安全)

LincZero小于 1 分钟

C++11新单例写法 (静态成员 线程安全)

class CSingleton
{
public:
    // 获取单例对象的函数
    static CSingleton& getInstance()
    {
        static CSingleton instance; // 局部静态特性
        return instance;
    }

    // 删除复制和赋值函数
    CSingleton(const CSingleton&) = delete;
    void operator=(const CSingleton&) = delete;

private:
    // 将构造和析构设为私有
    CSingleton() 
    {
        // 构造函数的内容
    }

    ~CSingleton() 
    {
        // 析构函数的内容
    }
};

在C++11中,静态局部变量的初始化是线程安全的。编译器会确保即使在多线程环境中,静态局部变量也只会被初始化一次。这是由C++标准保证的。

这就是为什么在getInstance函数中,我们不需要检查单例是否已经存在。当getInstance第一次被调用时,静态局部变量instance会被初始化。如果getInstance在后续被其他线程调用,instance不会再次被初始化。

因此,这种方法是线程安全的,并且比其他需要使用互斥锁或其他同步机制的方法更高效。