Виртуальный деструктор — это деструктор, объявленный с ключевым словом virtual в базовом классе. Он гарантирует, что когда объект производного класса удаляется через указатель или ссылку базового класса, во время выполнения вызывается правильный деструктор.
Когда ты удаляешь объект через указатель базового класса без виртуального деструктора, выполняется только деструктор базового класса. Это оставляет ресурсы производного класса невысвобожденными, вызывая утечки памяти.
class Base {
public:
virtual ~Base() {} // Виртуальный деструктор
};
class Derived : public Base {
public:
~Derived() {} // Правильно вызывается при удалении объекта
};
Виртуальные деструкторы необходимы когда:
Считается хорошей практикой объявлять деструкторы как виртуальные в любом классе, который:
virtual функции-членыБез виртуальных деструкторов ты рискуешь неполной очисткой ресурсов производного класса, что приводит к неопределённому поведению и утечкам памяти в продакшн-коде.
Виртуальный деструктор гарантирует, что при удалении объекта производного класса через указатель на базовый класс сначала вызывается деструктор производного класса, а затем деструктор базового класса.
Новый — ещё не проверен сообществом
Вы