为什么C ++ 11有`make_shared`而不是`make_unique`

时间:2012-09-25 09:50:12

标签: c++ c++11

  

可能重复:
  make_unique and perfect forwarding

为什么C ++ 11有make_shared模板,而不是make_unique模板?

这使得代码非常不一致。

auto x = make_shared<string>("abc");
auto y = unique_ptr<string>(new string("abc"));

1 个答案:

答案 0 :(得分:56)

根据Herb Sutter在this article的说法,这“部分是疏忽”。这篇文章包含一个很好的实现,并强有力地使用它:

template<typename T, typename ...Args>
std::unique_ptr<T> make_unique( Args&& ...args )
{
    return std::unique_ptr<T>( new T( std::forward<Args>(args)... ) );
}

更新:原始更新has been updated并且重点已更改。