Por que não há std::make_uniquemodelo de função na biblioteca C ++ 11 padrão? eu acho
std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3));
um pouco detalhado. O seguinte não seria muito melhor?
auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3);
Isso oculta newbem e apenas menciona o tipo uma vez.
De qualquer forma, aqui está minha tentativa de implementação de 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)...));
}
Levei um bom tempo para std::forwardcompilar o material, mas não tenho certeza se está correto. É isso? O que exatamente std::forward<Args>(args)...significa? O que o compilador faz disso?
make_uniquecom um deleter costume, porque, obviamente, ele aloca via velha e simples newe, portanto, deve usar planície antiga delete:)
make_uniqueseria limitada à newalocação ... bem, tudo bem se você quiser escrever, mas posso ver por que algo assim não faz parte do padrão.
make_uniquemodelo, pois o construtor de std::unique_ptré explícito e, portanto, é detalhado retornar unique_ptrde uma função. Além disso, eu prefiro usar do auto p = make_unique<foo>(bar, baz)que std::unique_ptr<foo> p(new foo(bar, baz)).
make_uniqueestá chegando C++14, consulte isocpp.org/blog/2013/04/trip-report-iso-c-spring-2013-meeting
unique_ptrnecessário um segundo parâmetro de modelo que você deve permitir de alguma forma - que é diferenteshared_ptr.