C++ 为什么C++;11有“使您共享”但没有“使您独一无二”`
可能重复:C++ 为什么C++;11有“使您共享”但没有“使您独一无二”`,c++,c++11,C++,C++11,可能重复: 为什么C++11有一个make_shared模板,而没有make_unique模板 这使得代码非常不一致 auto x = make_shared<string>("abc"); auto y = unique_ptr<string>(new string("abc")); auto x=make_shared(“abc”); 自动y=unique_ptr(新字符串(“abc”); 根据赫伯·萨特(Herb Sutter)的说法,这“部分是疏忽”。本文包含
为什么C++11有一个
make_shared
模板,而没有make_unique
模板
这使得代码非常不一致
auto x = make_shared<string>("abc");
auto y = unique_ptr<string>(new string("abc"));
auto x=make_shared(“abc”);
自动y=unique_ptr(新字符串(“abc”);
根据赫伯·萨特(Herb Sutter)的说法,这“部分是疏忽”。本文包含了一个很好的实现,并为使用它提供了有力的理由:
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::unique_ptr使_唯一(Args&&…Args)
{
return std::unique_ptr(新的T(std::forward)和重点已经改变。可能是因为unique
需要构造一个对象,他们认为最好明确地完成它。不是代码不一致,而是库。unique_ptr的复制构造函数是私有的。因此没有“返回值优化”。我的猜测是根据语言规范,此优化不是强制性的。@hyde谢谢。我更新了它,但新版本没有包含此答案中的示例实现(可以在注释中找到)和make_unique
也将在C++14中提供,在相同的内存中
头N3656采用C++14,具有独立的实现: