0

我知道类对象的完成顺序如下:

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

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

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

谢谢你的帮助 :)

4

1 回答 1

0

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

举个例子:

class Foo
{
protected:
    SomeType var;

public:
    ~Foo() {}
};

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

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

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

于 2015-01-05T11:57:38.897 回答