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

时间:2015-01-05 11:21:20

标签: c++ destructor finalization

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

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

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

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

感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

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

举个例子:

class Foo
{
protected:
    SomeType var;

public:
    ~Foo() {}
};

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

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

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