使用C ++中的shared_ptr从公共静态成员函数访问私有构造函数

时间:2019-06-24 11:52:39

标签: c++ class shared-ptr

考虑以下代码,我想将A对象的创建委托给名为make的方法,以允许该类的用户仅创建包裹在{中的实例{1}}:

std::shared_ptr

我本来以为,因为#include <memory> class A { private: A() {} public: static std::shared_ptr<A> make() { return std::make_shared<A>(); } }; int main() { std::shared_ptr<A> a = A::make(); return 0; } 是成员函数,所以将允许它访问私有构造函数,但显然并非如此。编译程序失败,并在make的源中显示以下消息:

std::shared_ptr

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

class A {
private:
    A() {}

public:
    static std::shared_ptr<A> make() {
        return std::shared_ptr<A>(new A());
    }
};