Sobes.tech
Назад к вопросам
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()

Если деструктор базового класса не виртуальный, при удалении через указатель на базовый класс вызовется только деструктор базового класса, а деструктор производного класса — нет, что приведёт к утечкам.