需要从 c 中的派生类调用基本析构函数吗?

新手上路,请多包涵

请考虑以下几点:

 class base{
    base();
    ~base();
}:

class derived : public base{

};

当派生类没有定义析构函数时,当派生对象被析构时,基类析构函数是否会自动调用?

否则,如果我在派生类中也有析构函数,我是否必须显式调用基类析构函数?

 class base{
    base();
    ~base();
}:

class derived : public base{
     derived();
     ~derived{
           base::~base(); //do I need this?
     }
};

原文由 Heisenbug 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 355
1 个回答

在这种情况下会自动调用基类析构函数; 你不需要调用它

但是,请注意, _当通过 delete 在基类指针上销毁对象并且析构函数不是 virtual 时,结果将是未定义的行为_(尽管您可能不会崩溃)。

在任何要派生的类中,始终将析构函数声明为 virtual 。如果基类不需要有析构函数,则包含一个 virtual 无论如何,它的主体为空。

对于边缘情况,上述规则有一个例外: _如果您的派生类不需要支持多态破坏_,那么析构函数不需要是 virtual 。在这种情况下,改为 protected 是正确的; 更多细节在这里,但请注意,这在实践中很少发生。

原文由 Jon 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题