Sobes.tech
Junior — Middle
152

De ce este important să declarați un destructor virtual în clasa de bază atunci când utilizați moștenirea?

Companiile au fost întrebate
101ХР101ХР

Răspuns de la AI

sobes.tech AI

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

Пример:

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()
}