Junior — Middle
133
Dans quels cas est-il nécessaire de déclarer le destructeur comme virtuel dans une classe?
Entreprises à qui on a demandé
Réponse de l'IA
sobes.tech IA
Деструктор необходимо объявлять виртуальным в базовом классе, если предполагается удаление объектов через указатель на базовый класс, когда фактический объект является производным классом. Это нужно для корректного вызова деструкторов производных классов и предотвращения утечек ресурсов.
Пример:
class Base {
public:
virtual ~Base() { /* очистка базовых ресурсов */ }
};
class Derived : public Base {
public:
~Derived() { /* очистка производных ресурсов */ }
};
Base* obj = new Derived();
delete obj; // вызовется ~Derived(), затем ~Base()
Если деструктор базового класса не виртуальный, при удалении через указатель на базовый класс вызовется только деструктор базового класса, а деструктор производного класса — нет, что приведёт к утечкам.