Почему в стандартной библиотеке С++ 11 нет шаблона функции std::make_unique
? Я нахожу
std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3));
немного подробный. Разве не было бы намного лучше?
auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3);
Это скрывает new
красиво и только упоминает тип один раз.
В любом случае, вот моя попытка реализации 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<Args>(args)...
? Что делает компилятор из этого?