В чем заключается предназначение виртуального деструктора в объектно-ориентированном программировании?
Ответ от нейросети
sobes.tech AI
Виртуальный деструктор в объектно-ориентированном программировании на C++ используется для правильного освобождения ресурсов при удалении объектов через указатель на базовый класс.
Если базовый класс имеет виртуальные функции, а деструктор не объявлен виртуальным, то при удалении объекта производного класса через указатель на базовый класс вызовется только деструктор базового класса. Это приведёт к утечкам памяти или другим ошибкам, так как деструктор производного класса не будет вызван.
Объявляя деструктор базового класса виртуальным, мы гарантируем, что при удалении объекта через базовый указатель вызовутся деструкторы всех уровней иерархии, начиная с производного класса и заканчивая базовым.
Пример:
class Base {
public:
virtual ~Base() { /* очистка базовых ресурсов */ }
};
class Derived : public Base {
public:
~Derived() override { /* очистка ресурсов Derived */ }
};
Base* obj = new Derived();
delete obj; // вызовется ~Derived() и затем ~Base()
Без виртуального деструктора в Base вызвался бы только ~Base(), что неправильно.