c – 为什么用make_unique调用初始化unique_ptr?

c – 为什么用make_unique调用初始化unique_ptr?,第1张

概述取自: 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>(); 我唯一的猜测是,如果我们想 取自: 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然后在=的右侧键入大量初始化.

我错过了什么?

解决方法 好吧,重点是第一个选项使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?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1236290.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存