make_unique и точная пересылка

Почему в стандартной библиотеке 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 (args) ... значить? Что делает компилятор?

215
задан Xeo 12 May 2012 в 02:36
поделиться