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

using std::shared_ptr with a protected constructordestructor

本文关键字:destructor 构造函数 一起 shared std ptr 受保护      更新时间:2023-10-16

可能的重复:
我该如何在班级上只使用受保护或私人构造函数的班级拨打:: std :: make_shared?

我想创建一个共享指针,并具有一种工厂方法,该方法在保持构造函数 destructor保护的同时返回。由于共享指针无法访问构造函数或驱动器,因此我会发现编译器错误。

我正在使用LLVM 4.1,但是我正在寻找可以独立编译器的解决方案(除了公开构造函数 destructor)。

这是一个代码样本:

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

有什么想法?

只是自己分配指针,而不是致电make_shared:

static std::shared_ptr<Foo> getSharedPointer()
{
    return std::shared_ptr<Foo>(new Foo);
}
但是,请注意,这将需要公开驱动器。