可能重复:
How do I call ::std::make_shared on a class with only protected or private constructors?
我想创建一个指向类的共享指针,并且有一个工厂方法可以在保持构造函数\析构函数受保护的情况下返回它。由于共享指针无法访问构造函数或析构函数,因此出现编译错误。
我正在使用llvm 4.1,但我正在寻找一个可以独立于编译器的解决方案(除了使构造函数\析构函数公开)。
这是一个代码示例:
class Foo
{
public:
static std::shared_ptr<Foo> getSharedPointer()
{
return std::make_shared<Foo>();
}
protected:
Foo(int x){}
~Foo(){}
};
任何想法?
答案 0 :(得分:2)
只需自己分配指针,而不是调用make_shared:
static std::shared_ptr<Foo> getSharedPointer()
{
return std::shared_ptr<Foo>(new Foo);
}
但请注意,这需要公开析构函数。