在 C++ 中使用 shared_ptr 从 public 静态成员函数访问私有构造函数
Access private constructor from public static member function using shared_ptr in C++
考虑以下代码,我想将 A
对象的创建委托给名为 make
的方法,以便 class 的用户仅创建包装在 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());
}
};
考虑以下代码,我想将 A
对象的创建委托给名为 make
的方法,以便 class 的用户仅创建包装在 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());
}
};