LINUX.ORG.RU

История изменений

Исправление 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;
};

не решение? потокобезопасность, константность и произвольные аргументы конструктора добавляются без проблем. При этом получаем переиспользуемый класс для отложенной инициализации, а не только идиому синглтонов.