Функция, которая возвращает singleton:
static SingletonDatabase& get()
{
static SingletonDatabase db;
return db;
}
Это новый способ реализации этого паттерна вместо того, что бы создавать приватное поле static Singleton* instance, а потом отдельно функцию, которая его возвращает.
Не могу понять, как вообще это работает и что это значит? Локальное статическое поле, с конструктором по умолчанию.
Почему эта реализация лучше предыдущих?
Этот способ не нов, просто раньше (до C++11) он не был потокобезопасен. Чем эта реализация лучше предыдущих? Тем, что не требует явного создания мьютекса для многопоточного использования, при этом занимает всего 2 строчки. Это простейший Singleton, который выполняет свою задачу. Что ещё нужно?
Что касается того, как это работает: статическая переменная (не важно локальная она или нет) создается один раз. Локальная создаётся в момент первого вызова функции и живёт до конца работы программы. Т.е. можно считать, что первая строчка функции выполняется всего один раз, когда впервые вызвана, а во всех остальных случаях просто происходит возврат ссылки.
Продвижение своими сайтами как стратегия роста и независимости