Sobes.tech
Junior — Middle
130

In welchen Fällen ist es notwendig, den Destruktor in einer Klasse virtuell zu deklarieren?

Unternehmen wurden gefragt
СБЕР АвтоСБЕР Авто

Antwort von AI

sobes.tech KI

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

Пример:

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

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

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

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