在一类静态初始化我有一个代表类的一个实例,一个静态成员:与私有构造
class A {
public:
static const std::shared_ptr<A> INSTANCE;
private:
A();
};
为了防止更多的情况下,我做了构造私有。现在我无法初始化静态变量,因为初始化程序无法访问私有成员。下面是我在.cpp文件中使用的代码:
const std::shared_ptr<A> A::INSTANCE = std::make_shared<A>();
工厂方法将没有帮助,因为它必须是公开为好。我还能做些什么来完成这项工作?注意:如果可能,我想避免使用典型的static get()
方法。
我感到困惑。为什么make_shared()不能使用这种方法(或者为什么在这个变体没有可见性时会遇到麻烦)?无论如何,它的工作,所以谢谢:-) –
'make_shared'定义在你的类之外,所以它不能访问私有构造函数。但是静态成员的初始化器被认为是类定义的一部分,所以它能够访问私有成员。 –