C++:派生 class 对象的终结顺序

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

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

现在我被问及派生 class 对象的最终确定顺序。 我想它是完全一样的,但是基础class对象的析构函数在完成上述步骤后是否也被调用了?

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

感谢您的帮助:)

析构函数的调用顺序与构造函数相反。这意味着基class的析构函数将在派生class.

的析构函数之后自动调用。

举个例子:

class Foo
{
protected:
    SomeType var;

public:
    ~Foo() {}
};

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

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

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