使用std :: shared_ptr的一个受保护的构造\\析构函数[复制](using std::

2019-09-24 04:56发布

可能重复:
如何调用::性病:: make_shared一类,只有保护的或私有的构造函数?

我想创建一个共享的指针类,并有一个返回它,同时保持保护构造\析构函数的工厂方法。 由于共享指针不能访问的构造函数或析构函数,我得到的编译器错误。

我使用LLVM 4.1,但我期待的,可以是独立的编译器(除了使构造\析公)的解决方案。

这是一个代码示例:

class Foo
{
public:
    static std::shared_ptr<Foo> getSharedPointer()
    {
        return std::make_shared<Foo>();
    }

protected:
    Foo(int x){}
    ~Foo(){}

};

有任何想法吗?

Answer 1:

仅分配指针自己而不是调用make_shared:

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

但是请注意,这将需要做的析构函数公开。



文章来源: using std::shared_ptr with a protected constructor\\destructor [duplicate]