gpt4 book ai didi

c++ - 派生类与基类的 std::shared_ptr 的使用

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

下面的方法好不好?

class TA      {  };
class TB : TA { };

std::shared_ptr<TA> spta;
spta.reset(new TB);

最佳答案

显示的代码有一个问题,TB必须公开继承自 TA .你有一个 shared_ptr<TA> , 所以你想要存储在其中的指针必须可以转换为 TA , 但带有 private继承,基础不可访问,因此您的代码将无法编译。

class TA             {  };
class TB : public TA { };

除此之外,代码没有错误并且运行良好。通常,通过基类指针对派生类实例进行多态删除时,需要基类的析构函数为virtual。所以派生类析构函数被调用,但在 shared_ptr 的情况下这是没有必要的。 shared_ptr::reset 是一个函数模板,可以接受任何 Y*可转换为托管指针类型。 shared_ptr也是如此的 constructor template .

也就是说,您应该更喜欢创建基类的析构函数 virtual ,特别是如果涉及的类有其他 virtual功能。

关于c++ - 派生类与基类的 std::shared_ptr 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33859559/

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