Sobes.tech
Junior — Middle
134

In welke gevallen is het nodig om de destructor als virtueel te declareren in een klasse?

Bedrijven waar gevraagd werd
СБЕР АвтоСБЕР Авто

Antwoord van AI

sobes.tech AI

Деструктор необходимо объявлять виртуальным в базовом классе, если предполагается удаление объектов через указатель на базовый класс, когда фактический объект является производным классом. Это нужно для корректного вызова деструкторов производных классов и предотвращения утечек ресурсов.

Пример:

class Base {
public:
    virtual ~Base() { /* очистка базовых ресурсов */ }
};

class Derived : public Base {
public:
    ~Derived() { /* очистка производных ресурсов */ }
};

Base* obj = new Derived();
delete obj; // вызовется ~Derived(), затем ~Base()

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