Как инициализировать членов класса в шаблоне Singleton? - PullRequest
5 голосов
/ 04 марта 2011

У меня есть класс по одноэлементному подходу, но где я могу инициализировать членов класса, если его конструктор является закрытым?

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

Ответы [ 3 ]

12 голосов
/ 04 марта 2011

Вы можете инициализировать членов класса в самом конструкторе как обычно , даже если он частный.

Конструктор приват для внешнего мира, не для статической функции-члена Instance().Это означает, что строка static MyClass singleton в Instance() фактически вызывает конструктор по умолчанию, и это действительно, поскольку Instance() имеет доступ к private членам класса!

3 голосов
/ 04 марта 2011

В конструкторе вот для чего он.Он имеет полный доступ к членам.

Также имейте в виду, что это небезопасно в многопоточном приложении.

0 голосов
/ 04 марта 2011

Ваш метод Instance вызывает конструктор.Метод Instance является статическим, поэтому вы можете получить к нему доступ без его сборки, а поскольку он является членом, он может вызывать закрытый конструктор.

Ваш конструктор может затем выполнить любую необходимую инициализацию.

Кроме того, ваш одноэлементный член должен быть указателем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...