Daily bit(e) C++. Паттерн Синглтон
Добавлено 5 октября 2026 в 16:52
Daily bit(e) C++ 138, простейшая реализация паттерна «Одиночка» (Singleton), также известная как «синглтон Скотта Мейерса».

По возможности следует избегать использования синглтонов, так как они усложняют процесс тестирования. Однако иногда глобальное состояние оказывается наименьшим из зол.
Если вам необходим синглтон, можно использовать простую функцию-геттер, возвращающую ссылку на локальную статическую переменную.
Инициализация статических переменных с локальной областью видимости (внутри блока) выполняется потокобезопасно и с соблюдением гарантий безопасности при возникновении исключений.
struct GlobalData
{
int state;
private:
// Опционально: запретить создание GlobalData
// за пределами get_global_data()
GlobalData(int state) : state(state) {}
friend GlobalData& get_global_data();
};
// также известная как «синглтон Скотта Мейерса»
GlobalData& get_global_data()
{
// Статические переменные с блочной областью видимости имеют
// статическое время жизни и инициализируются при первом прохождении
// потока управления через их объявление;
// при этом обеспечивается потокобезопасность.
static GlobalData storage{42};
return storage;
// Примечание: если при инициализации возникнет исключение,
// попытка будет повторена при следующем проходе.
}
// get_global_data().state == 42
