Назад к вопросам
СБЕР Авто
Junior — Middle
89
В каких случаях необходимо объявлять деструктор виртуальным в классе?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Деструктор необходимо объявлять виртуальным в базовом классе, если предполагается удаление объектов через указатель на базовый класс, когда фактический объект является производным классом. Это нужно для корректного вызова деструкторов производных классов и предотвращения утечек ресурсов.
Пример:
class Base {
public:
virtual ~Base() { /* очистка базовых ресурсов */ }
};
class Derived : public Base {
public:
~Derived() { /* очистка производных ресурсов */ }
};
Base* obj = new Derived();
delete obj; // вызовется ~Derived(), затем ~Base()
Если деструктор базового класса не виртуальный, при удалении через указатель на базовый класс вызовется только деструктор базового класса, а деструктор производного класса — нет, что приведёт к утечкам.