деструктор — C ++: порядок завершения объекта производного класса

Я знаю, что порядок завершения объекта класса следующий:

  • Выполнить тело деструктора
  • Уничтожить объект (то есть освободить память, используемую для элементов данных)

Теперь меня спросили о порядке завершения для объектов производного класса.
Я предполагаю, что это точно то же самое, но вызывается ли деструктор объекта базового класса после выполнения вышеуказанных шагов?

Я так не думаю, но хотел быть уверенным на экзамене.

Спасибо за вашу помощь 🙂

0

Решение

Деструкторы вызываются в обратном порядке построения. Это означает, что деструктор базового класса будет автоматически вызываться после деструктора производного класса.

Возьмите этот пример:

class Foo
{
protected:
SomeType var;

public:
~Foo() {}
};

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

Если деструктор базового класса Foo был вызван до деструктор класса Баз, затем объект вар был бы уничтожен (его деструктор был бы автоматически вызван при уничтожении Фу), и вы попали бы в область неопределенного поведения.

Это простое и понятное объяснение Зачем деструкторы называются так.

0

Другие решения


По вопросам рекламы [email protected]