C++:派生类对象的最终完成顺序

C++ : Order of finalization of a derived class object

本文关键字:顺序 派生 对象 C++      更新时间:2023-10-16

我知道类对象的最终确定顺序如下:

  • 析构函数的执行主体
  • 销毁对象(即释放用于数据成员的内存)

现在有人问我派生类对象的最终顺序。我想它是完全相同的,但是在执行上述步骤后是否也调用了基类对象的析构函数?

我不这么认为,但想确定考试。

感谢您的帮助:)

析构函数以与构造相反的顺序调用。这意味着基类的析构函数将在派生类的析构函数之后自动调用。

举个例子:

class Foo
{
protected:
    SomeType var;
public:
    ~Foo() {}
};
class Baz : public Foo
{
public:
    ~Baz()
    {
        var.doSomething();
    }
};

如果在类 Baz 的析构函数之前调用基类 Foo 的析构函数,那么对象 var 将被销毁(它的析构函数将在 Foo 销毁时自动调用),您将进入未定义行为的领域。

这是对析构函数为何以这种方式调用的简单直观的解释。