Почему в стандартной библиотеке C ++ 11 нет шаблона функции std :: make_unique
? Я считаю
std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3));
немного многословным. Разве следующее не было бы намного лучше?
auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3);
Это прекрасно скрывает новый
и упоминает тип только один раз.
В любом случае, вот моя попытка реализации make_unique
:
template<typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args)
{
return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}
Мне потребовалось довольно много времени, чтобы скомпилировать материал std :: forward
, но я не уверен, что он правильный. Это? Что именно делает std :: forward
значить? Что делает компилятор?