История изменений
Исправление Begemoth, (текущая версия) :
Хмм, а такой вариант:
template<typename T>
class delay_init
{
public:
auto operator*() -> T&
{
if (!val) val = std::make_unique<T>();
return *T;
}
private:
std::unique_ptr<T> val;
};
не решение? потокобезопасность, константность и произвольные аргументы конструктора добавляются без проблем (и std::unique_ptr можно заменить на boost::optional или будущий std::optional). При этом получаем переиспользуемый класс для отложенной инициализации, а не только идиому синглтонов.
Исходная версия Begemoth, :
Хмм, а такой вариант:
template<typename T>
class delay_init
{
public:
auto operator*() -> T&
{
if (!val) val = std::make_unique<T>();
return *T;
}
private:
std::unique_ptr<T> val;
};
не решение? потокобезопасность, константность и произвольные аргументы конструктора добавляются без проблем. При этом получаем переиспользуемый класс для отложенной инициализации, а не только идиому синглтонов.