Sobes.tech
Junior — Middle

Bij het verwijderen van een object via een pointer naar de basisklasse met een gedefinieerde virtuele destructor, hoe worden de destructors in de erfvolgorde aangeroepen?

sobes.tech AI

Antwoord van AI

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

Пример:

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

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

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

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