Реализация Singleton в С++

134
02 декабря 2019, 20:30

Функция, которая возвращает singleton:

static SingletonDatabase& get()
{
    static SingletonDatabase db;
    return db;
}

Это новый способ реализации этого паттерна вместо того, что бы создавать приватное поле static Singleton* instance, а потом отдельно функцию, которая его возвращает.

Не могу понять, как вообще это работает и что это значит? Локальное статическое поле, с конструктором по умолчанию.

Почему эта реализация лучше предыдущих?

Answer 1

Этот способ не нов, просто раньше (до C++11) он не был потокобезопасен. Чем эта реализация лучше предыдущих? Тем, что не требует явного создания мьютекса для многопоточного использования, при этом занимает всего 2 строчки. Это простейший Singleton, который выполняет свою задачу. Что ещё нужно?

Что касается того, как это работает: статическая переменная (не важно локальная она или нет) создается один раз. Локальная создаётся в момент первого вызова функции и живёт до конца работы программы. Т.е. можно считать, что первая строчка функции выполняется всего один раз, когда впервые вызвана, а во всех остальных случаях просто происходит возврат ссылки.

READ ALSO
Почему stof округляет значение до целых?

Почему stof округляет значение до целых?

В файле запись Percent:0500 код ниже выводит 0

156
не устанавливается gluon plugin

не устанавливается gluon plugin

еще до сноса старой версии eclipse (она же как бы и новая) gluon устанавливалась (через market place) и работала нормально но в новой версии eclipse у меня...

146
Как отсортировать JSONArray по ключу в JSONObject?

Как отсортировать JSONArray по ключу в JSONObject?

Получаю такого вида JSONArray:

204
рабочий цикл Vompal Wabbit

рабочий цикл Vompal Wabbit

Хотелось бы узнать, какие есть практики использование программы vompal wabbit (можно и похожие, здесь это не важно)

139