如何在C++中正确实现Singleton模式(现代方法)
大家好,同事们!我最近开始学习设计模式,遇到了Singleton。我理解其思想:确保一个类只有一个实例,并提供一个全局访问点。但在C++中,我看到了许多不同的实现,无法确定哪个是正确的且线程安全的。
例如,我写了这样一个简单的版本:
```cpp
class Singleton {
public:
static Singleton* getInstance() {
if (!instance) {
instance = new Singleton();
}
return instance;
}
void doSomething() { /* ... */ }
private:
Singleton() {}
static Singleton* instance;
};
Singleton* Singleton::instance = nullptr;
```
但有几个点让我困惑:
1. 这不是线程安全的:如果两个线程同时调用`getInstance()`,可能会创建两个对象。
2. 是否需要显式删除对象?如果需要,如何删除?在析构函数中?但那样谁会调用析构函数?
3. 我在网上看到了使用`std::call_once`的版本。