【发布时间】:2013-05-27 13:47:27
【问题描述】:
取自:http://herbsutter.com/2013/05/22/gotw-5-solution-overriding-virtual-functions/
我们为什么要写:
auto pb = unique_ptr<base>{ make_unique<derived>() };
不仅仅是:
auto pb = make_unique<derived>();
我唯一的猜测是,如果我们想要auto,我们需要帮助它推断出正确的类型(这里是base)。
如果是这样,那么对我来说这将是一个值得怀疑的优点.. 输入 auto 然后在 = 的右侧输入大量初始化 ..
我错过了什么?
【问题讨论】:
-
呃,为什么?因为你想要第一件事而不是第二件事?它们不是等价的。 (查看
decltype(pb)) -
这里有一点很清楚,如果你有一个派生的 smart_pointer,你就不能轻易地将它转换为 base。因为不像base *x;并派生出*y;类型层次结构中没有关系。
-
只是想知道,
unique_ptr<base> pb = make_unique<derived>();会更简单吗?因为auto的存在并不意味着我们必须使用它。 -
@FredericS:它会稍微短一些,对于不习惯 C++11 的人来说更熟悉,并且因为它涉及隐式转换,所以不太明确。这是否使它“更简单”是一种审美判断。
-
@SanderDeDycker 使用 uniform-init 效果更好:
{}