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

Access private constructor from public static member function using shared_ptr in C++

本文关键字:函数 静态成员 访问 构造函数 共享 ptr 使用      更新时间:2023-10-16

考虑以下代码,我想将A对象的创建委托给一个称为make的方法,以允许类的用户仅创建包裹在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的来源中以以下消息失败:

/usr/include/c++/8/ext/new_allocator.h:136:4: error: ‘A::A()’ is private within this context

如何解决此问题?

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