将std :: shared_ptr与受保护的构造函数\析构函数一起使用

时间:2012-10-16 17:53:33

标签: c++ c++11 shared-ptr

  

可能重复:
  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(){}

};

任何想法?

1 个答案:

答案 0 :(得分:2)

只需自己分配指针,而不是调用make_shared:

static std::shared_ptr<Foo> getSharedPointer()
{
    return std::shared_ptr<Foo>(new Foo);
}

但请注意,这需要公开析构函数。