【问题标题】:When the destructor of a subclass is called, will the destructor of a parent class also be called? [duplicate]当子类的析构函数被调用时,父类的析构函数也会被调用吗? [复制]
【发布时间】:2012-09-02 08:29:25
【问题描述】:

可能重复:
Do I need to explicitly call the base virtual destructor?

假设您有以下内容:

class ParentClass {
    ...
    virtual ~ParentClass();

class ChildClass {
    ...
    virtual ~ChildClass();

哪些析构函数会被调用?父母和孩子的析构函数都会被调用吗?目前我的电脑上没有设置 C++ 编译器。

【问题讨论】:

  • 让我向您介绍liveworkspace.org。如果您需要任何其他语言或这些编译器或输入的旧版本,ideone.com 非常适合。
  • 有趣的是,我刚刚回到我在 Effective C++ 中停下来的地方,在页面顶部发现了这个:析构函数的工作方式是首先调用最派生类的析构函数,然后调用每个基类的析构函数。

标签: c++


【解决方案1】:

如果ChildClass 派生自ParentClass,则首先调用派生析构函数,然后调用父类。在您的代码中,ChildClass 不会继承自 ParentClass

【讨论】:

    【解决方案2】:

    是的,两个构造函数都被调用:构造和销毁是对称的:所有子对象都以与它们创建时完全相反的顺序被销毁。对于破坏顺序,析构函数是否为虚拟无关紧要。虚拟析构函数与非虚拟析构函数的唯一影响是delete使用指向基址的指针对一个被驱动的类型的对象产生影响:如果基址的析构函数不是虚拟的,这将导致未定义的行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-08
      • 2022-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多