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

Какая последовательность вызова методов разрушения объектов происходит при уничтожении объекта в языке программирования?

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

sobes.tech 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.