Yan*_*nko 6 c++ c++11 gotw c++14
取自:http://herbsutter.com/2013/05/22/gotw-5-solution-overriding-virtual-functions/
我们为什么要写:
auto pb = unique_ptr<base>{ make_unique<derived>() };
Run Code Online (Sandbox Code Playgroud)
而不仅仅是:
auto pb = make_unique<derived>();
Run Code Online (Sandbox Code Playgroud)
我唯一的猜测是,如果我们想要auto,我们需要帮助它推断出正确的类型(base这里).
如果是这样,那么对我来说,这将是真正值得怀疑的优点..键入auto然后在右侧输入很多初始化=..
我错过了什么?
And*_*owl 10
好吧,重点是第一个选项产生pb一个unique_ptr<base>,而第二个选项产生pb一个unique_ptr<derived>.在你的情况下两者是否正确取决于你要做什么pb- 但绝对两者并不相同.
如果你的程序的相关部分需要使用a unique_ptr<base>(可能因为稍后你将它指向一个不同的派生类的实例),那么第二个解决方案根本不可行.
例如:
auto pb = unique_ptr<base>{ make_unique<derived>() };
// ...
pb = make_unique<derived2>(); // This is OK
// ...
Run Code Online (Sandbox Code Playgroud)
鉴于:
auto pb = make_unique<derived>();
// ...
pb = make_unique<derived2>(); // ERROR! "derived2" does not derive from "derived"
// ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3847 次 |
| 最近记录: |