Sobes.tech
Назад к вопросам
Junior — Middle
89

Объясните назначение виртуального деструктора в контексте объектно-ориентированного программирования.

Компании, где спрашивали
КасперскийКасперский

Ответ от нейросети

sobes.tech AI

Виртуальный деструктор в C++ используется для корректного освобождения ресурсов при удалении объекта через указатель на базовый класс. Если базовый класс имеет виртуальный деструктор, то при вызове delete через указатель на базовый класс будет вызван деструктор производного класса, что гарантирует правильное разрушение объекта и предотвращает утечки памяти.

Пример:

class Base {
public:
    virtual ~Base() { std::cout << "Base destructor\n"; }
};

class Derived : public Base {
public:
    ~Derived() { std::cout << "Derived destructor\n"; }
};

int main() {
    Base* obj = new Derived();
    delete obj; // вызовется сначала Derived::~Derived, затем Base::~Base
}

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