【发布时间】:2017-07-16 09:38:32
【问题描述】:
我有一个带有私有构造函数的单例类。在静态工厂方法中,我执行以下操作:
shared_ptr<MyClass> MyClass::GetInstance()
{
static once_flag onceFlag;
call_once(onceFlag, []() {
if (_instance == nullptr)
_instance.reset(new MyClass());
});
return _instance;
}
如果我使用
_instance = make_shared<MyClass>();
代码无法编译。我的问题是:为什么new 可以调用私有构造函数而make_shared 不能?
【问题讨论】:
-
这段代码没有意义,因为当您仍然为自己保留
shared_ptr的实例(我假设_instance是shared_ptr< MyClass >)并检查是否_instance时,共享单例的所有权是没有意义的is nullptr 是没有意义的,因为这个块受一次标志保护。在这种情况下让make_shared工作(例如通过声明它为朋友)也没有任何意义,因为这样就可以在任何地方创建MyClass的实例。 -
好的,我明白你的意思,条件
if (_instance == nullptr)不是必需的。 _instance 是一个静态类变量。我不明白为什么shared_ptr没有意义?
标签: c++ shared-ptr