【发布时间】:2012-09-25 09:50:11
【问题描述】:
为什么C++11有make_shared模板,却没有make_unique模板?
这使得代码非常不一致。
auto x = make_shared<string>("abc");
auto y = unique_ptr<string>(new string("abc"));
【问题讨论】:
-
可能是因为
unique需要构造一个对象,他们认为最好显式完成 -
不一致的不是代码,而是库。
-
unique_ptr 的复制构造函数是私有的。所以 make_unique 没有“返回值优化”是行不通的。我的猜测是根据语言规范,这种优化不是强制性的。