C++11新单例写法 (静态成员 线程安全)
小于 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
不会再次被初始化。
因此,这种方法是线程安全的,并且比其他需要使用互斥锁或其他同步机制的方法更高效。