Класс‑одиночка (Singleton) в стиле глобального доступа

Скройте конструктор, запретите копирование и возвращайте ссылку на локальный static-объект. Начиная с C++11 его первоначальная инициализация защищена от одновременного выполнения потоками.

Короткий ответ

Что ответить на собеседовании

Скройте конструктор, запретите копирование и возвращайте ссылку на локальный static-объект. Начиная с C++11 его первоначальная инициализация защищена от одновременного выполнения потоками.

Подробный разбор

Ответ с пояснениями

Условие

Создайте класс, реализующий паттерн Singleton, так чтобы в процессе работы программы существовал ровно один его объект, доступный из любой точки кода.

class MySingleton {
    // реализовать по шаблону Singleton
};

Ответ

Скройте конструктор, запретите копирование и возвращайте ссылку на локальный static-объект. Начиная с C++11 его первоначальная инициализация защищена от одновременного выполнения потоками.

class MySingleton {
    MySingleton() = default;
    ~MySingleton() = default;
public:
    MySingleton(const MySingleton&) = delete;
    MySingleton& operator=(const MySingleton&) = delete;
    static MySingleton& instance() {
        static MySingleton object;
        return object;
    }
};

Защита инициализации не делает методы объекта потокобезопасными. Также учитывайте зависимости при завершении программы и границы динамических библиотек: такой шаблон не является межпроцессным singleton. Глобальный доступ затрудняет подмену зависимостей в тестах.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее