【发布时间】:2020-12-01 03:48:25
【问题描述】:
#include <iostream>
#include <memory>
using namespace std;
class Demo {
static shared_ptr<Demo> d;
Demo(){}
public:
static shared_ptr<Demo> getInstance(){
if(!d)
d.reset(new Demo);
return d;
}
~Demo(){
cout << "Object Destroyed " << endl;
}
};
// shared_ptr<Demo> Demo::d(new Demo); // private ctor is accepted
shared_ptr<Demo> Demo::d;
int main()
{
shared_ptr<Demo> d(Demo::getInstance());
cout << d.use_count() << endl;
return 0;
}
- 这是使用 shared_ptr 实现单例类的正确方法吗
- 请参阅上面的注释行来初始化静态 shared_ptr 我们为什么可以在这里创建一个对象来使用私有构造初始化 shared_ptr
【问题讨论】:
-
单例更像是一种反模式,所以我建议根本不要实现它们。它们与全局变量没有什么不同。
-
虽然很多人都同意不明智地使用单例可能会产生问题,但我认为在这里批评它们并不是特别有用——它无助于提问者解决问题。
标签: c++11