我有一个跟随单例方法的类,但是如果它的构造函数是私有的,我在哪里初始化类成员?
class MyClass
{
MyClass() {}; //constructor is private
MyClass(const MyClass&);
MyClass& operator=(const MyClass&);
public:
static MyClass& Instance()
{
static MyClass singleton;
return singleton;
}
};
答案 0 :(得分:12)
您可以像往常一样在构造函数本身中初始化类成员,即使是私有的。
构造函数私有到外部世界,不到静态成员函数Instance()
。这意味着,static MyClass singleton
中的行Instance()
实际上会调用默认构造函数,这是有效的,因为Instance()
可以访问该类的private
成员!
答案 1 :(得分:3)
在构造函数中,这就是它的用途。它可以完全访问成员。
另外,请注意,这在多线程应用程序中是不安全的。
答案 2 :(得分:0)
您的Instance方法调用构造函数。 Instance方法是静态的,因此您可以在不构建它的情况下访问它,因为它是一个成员,它可以调用私有构造函数。
然后,您的构造函数可以进行任何必要的初始化。
顺便说一下,你的单身成员应该是指针。