Внедрение виртуального деструктора в базовый класс

Добавьте публичный virtual-деструктор базового класса. Тогда delete через BaseClass* вызовет сначала деструктор фактического производного типа, затем деструктор базы.

Короткий ответ

Что ответить на собеседовании

Добавьте публичный virtual-деструктор базового класса. Тогда delete через BaseClass* вызовет сначала деструктор фактического производного типа, затем деструктор базы.

Подробный разбор

Ответ с пояснениями

Условие

Внедрите виртуальный деструктор в родительский тип, чтобы гарантировать корректное освобождение памяти при удалении объектов через указатель базового типа.

struct BaseClass {
    // виртуальный деструктор
};

struct DerivedClass : BaseClass {
    // ...
};

Ответ

Добавьте публичный virtual-деструктор базового класса. Тогда delete через BaseClass* вызовет сначала деструктор фактического производного типа, затем деструктор базы.

struct BaseClass {
    virtual ~BaseClass() = default;
};
struct DerivedClass : BaseClass {
    ~DerivedClass() override = default;
};

override у производного деструктора полезен как проверка контракта, хотя виртуальность наследуется автоматически. Вместо ручного delete можно хранить объект в unique_ptr<BaseClass>; требование к виртуальному деструктору при таком полиморфном удалении сохраняется. Освобождение собственных полей производного класса выполняется обычным механизмом разрушения.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее