Sobes.tech
Junior — Middle

Wat is de volgorde van aanroepen van destructiemethoden van objecten die plaatsvindt bij het vernietigen van een object in een programmeertaal?

sobes.tech AI

Antwoord van AI

В C++ при уничтожении объекта последовательность вызова методов разрушения зависит от иерархии наследования:

  1. Сначала вызывается деструктор самого производного (наследника) класса.
  2. Затем последовательно вызываются деструкторы базовых классов в порядке обратном их объявлению.

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

Пример:

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 destructor
                // Base destructor
}

Таким образом, сначала вызывается деструктор Derived, затем Base.