我正在尝试学习可以在C ++中使用的工厂模式。我不知道为什么我不能归还一个独特的ptr。我可以返回一个共享的ptr就好了。这是我的代码:
class FactoryMethodExample {
FactoryMethodExample() {}
public:
static FactoryMethodExample get_instance() {
return {};
}
static FactoryMethodExample * get_pointer() {
return new FactoryMethodExample;
}
static unique_ptr<FactoryMethodExample> get_unique_instance() {
return make_unique<FactoryMethodExample>();
}
static shared_ptr<FactoryMethodExample> get_shared_instance() {
return shared_ptr<FactoryMethodExample>();
}
void verify() {
cout << "I exist" << endl;
}
};
此代码无法编译。我收到这个错误:
error: calling a private constructor of class 'FactoryMethodExample'
return unique_ptr<_Tp>(new _Tp(_VSTD::forward<_Args>(__args)...));
答案 0 :(得分:1)
首先,您的shared_ptr
和unique_ptr
示例无法比较。
make_unique
创建一个用值初始化的unique_ptr
。
shared_ptr
只是shared_ptr
类的构造函数调用,它将使用空指针初始化。
这就是为什么你得到两个不同的结果。
您遇到错误的原因是因为您有私有构造函数。最简单的解决方案是让make_unique(和make_shared)成为朋友。
请参阅以下问题以获得一些指导:How to make std::make_unique a friend of my class
此外,您的功能名称可能会产生误导。 get_shared_instance 意味着每次都会返回相同的实例,我想你想返回一个新实例的shared_ptr?