Нужна помощь в понимании шаблона синглтона

0

может кто-нибудь объяснить мне этот код?

class S
{
    public:
      static S& getInstance()
        {
            static S    instance;
            return instance;
        }
    private:
        S() {}
        S(S const&);              // Don't Implement.
        void operator=(S const&); // Don't implement
};

Я понял: getInstance - это статический метод, который возвращает ссылку на экземпляр, но где этот экземпляр создан? Я не вижу новых S(); так..

  • 5
    Он создан прямо здесь: static S instance; - вам не нужно new чтобы создать объект.
  • 0
    статическая переменная в функции, созданная при первом вызове и существующая до завершения программы;
Показать ещё 18 комментариев
Теги:
singleton

1 ответ

1
Лучший ответ

Сущность объекта области с статическим временем хранения (в вашем случае static S instance;) static S instance; инициализируется, когда первый элемент управления проходит через его объявление. До С++ 11 это не является потокобезопасным (однако некоторые компиляторы предлагают варианты для обеспечения безопасности потоков). Что касается С++ 11, в стандарте указано, что "Если элемент управления входит в объявление одновременно при инициализации переменной, одновременное выполнение должно ждать завершения инициализации".

  • 0
    «инициализируется при первом прохождении контроля» - если он имеет явную инициализацию. Тем не менее, он всегда инициализируется нулями перед каждым другим видом инициализации.
  • 0
    @ H2CO3 Спасибо за комментарий. Да, нулевая инициализация всегда происходит в первую очередь.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню