Junior — Middle
135
Pourquoi est-il important de déclarer un destructeur virtuel dans la classe de base lors de l'utilisation de l'héritage?
Entreprises à qui on a demandé
Réponse de l'IA
sobes.tech IA
Если в базовом классе не объявить деструктор виртуальным, при удалении объекта производного класса через указатель на базовый класс вызовется только деструктор базового класса. Это приведёт к тому, что ресурсы, выделенные в производном классе, не будут корректно освобождены, что может вызвать утечки памяти и другие ошибки. Объявление деструктора виртуальным гарантирует вызов деструкторов всех уровней и правильное освобождение ресурсов.
Пример:
class Base {
public:
virtual ~Base() { std::cout << "Base destructor\n"; }
};
class Derived : public Base {
public:
~Derived() { std::cout << "Derived destructor\n"; }
};
int main() {
Base* obj = new Derived();
delete obj; // Вызовет сначала Derived::~Derived(), затем Base::~Base()
}