C++单例类,两次检查怎么写
时间: 2024-09-15 14:15:13 浏览: 46
C++中的单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供全局访问点。当需要确保在整个程序生命周期内只创建一次某个类的对象时,可以使用单例模式。为了防止多次意外创建对象,通常会采用双重检查锁定(Double-Check Locking)的方法来保证线程安全。以下是一个简单的例子:
```cpp
// 使用互斥锁mutex
#include <mutex>
class Singleton {
private:
// 将构造函数设置为私有,防止外部直接实例化
Singleton() = default;
~Singleton() = delete; // 防止析构多次执行
// 创建静态全局唯一指针
static std::once_flag flag;
static Singleton* instance;
public:
// 获取唯一实例的方法
static Singleton& getInstance() {
std::call_once(flag, []{
std::lock_guard<std::mutex> lock(instanceMutex);
if (!instance) {
instance = new Singleton();
}
});
return *instance;
}
};
std::once_flag Singleton::flag;
Singleton* Singleton::instance = nullptr;
// 注意:这里假设存在一个全局的std::mutex instanceMutex用于同步
阅读全文