如何以单例模式初始化类成员?

时间:2011-03-04 18:01:52

标签: c++ singleton

我有一个跟随单例方法的类,但是如果它的构造函数是私有的,我在哪里初始化类成员?

class MyClass
{
    MyClass() {};                //constructor is private         
    MyClass(const MyClass&);            
    MyClass& operator=(const MyClass&);
public:
    static MyClass& Instance()
    {
        static MyClass singleton;
        return singleton;
    }
};

3 个答案:

答案 0 :(得分:12)

您可以像往常一样在构造函数本身中初始化类成员,即使是私有的。

构造函数私有到外部世界,到静态成员函数Instance()。这意味着,static MyClass singleton中的行Instance()实际上会调用默认构造函数,这是有效的,因为Instance()可以访问该类的private成员!

答案 1 :(得分:3)

在构造函数中,这就是它的用途。它可以完全访问成员。

另外,请注意,这在多线程应用程序中是不安全的。

答案 2 :(得分:0)

您的Instance方法调用构造函数。 Instance方法是静态的,因此您可以在不构建它的情况下访问它,因为它是一个成员,它可以调用私有构造函数。

然后,您的构造函数可以进行任何必要的初始化。

顺便说一下,你的单身成员应该是指针。