gpt4 book ai didi

c++ - 为什么要用 make_unique 调用来初始化 unique_ptr?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:04:16 25 4
gpt4 key购买 nike

取自: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 然后在 = 的右侧键入大量初始化..

我错过了什么?

最佳答案

嗯,重点是第一个选项使 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?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16774647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com