Avatar ·

如何在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`的版本。