Я знаю, что порядок завершения объекта класса следующий:
Теперь меня спросили о порядке завершения для объектов производного класса.
Я предполагаю, что это точно то же самое, но вызывается ли деструктор объекта базового класса после выполнения вышеуказанных шагов?
Я так не думаю, но хотел быть уверенным на экзамене.
Спасибо за вашу помощь 🙂
Деструкторы вызываются в обратном порядке построения. Это означает, что деструктор базового класса будет автоматически вызываться после деструктора производного класса.
Возьмите этот пример:
class Foo
{
protected:
SomeType var;
public:
~Foo() {}
};
class Baz : public Foo
{
public:
~Baz()
{
var.doSomething();
}
};
Если деструктор базового класса Foo был вызван до деструктор класса Баз, затем объект вар был бы уничтожен (его деструктор был бы автоматически вызван при уничтожении Фу), и вы попали бы в область неопределенного поведения.
Это простое и понятное объяснение Зачем деструкторы называются так.