我们为什么要写:
auto pb = unique_ptr<base>{ make_unique<derived>() };
而不仅仅是:
auto pb = make_unique<derived>();
我唯一的猜测是,如果我们想要自动,我们需要帮助它推断出正确的类型(这里是基础).
如果是这样,那么对我来说,这将是非常值得怀疑的…键入auto然后在=的右侧键入大量初始化.
我错过了什么?
解决方法 好吧,重点是第一个选项使pb成为unique_ptr< base>,而第二个选项使pb成为unique_ptr< derived>.在你的情况下两者是否正确取决于你与pb有什么关系 – 但绝对两者并不相同.如果程序的相关部分需要使用unique_ptr< base> (也许是因为稍后你会让它指向一个不同派生类的实例),那么第二种解决方案根本不可行.
例如:
auto pb = unique_ptr<base>{ make_unique<derived>() };// ...pb = make_unique<derived2>(); // This is OK// ...
鉴于:
auto pb = make_unique<derived>();// ...pb = make_unique<derived2>(); // ERROR! "derived2" does not derive from "derived"// ...总结
以上是内存溢出为你收集整理的c – 为什么用make_unique调用初始化unique_ptr?全部内容,希望文章能够帮你解决c – 为什么用make_unique调用初始化unique_ptr?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)