Sobes.tech
Junior — Middle

Milyen sorrendben hívódnak meg az objektumok megsemmisítésének módszerei egy programozási nyelvben történő objektum megsemmisítésekor?

sobes.tech MI

Válasz az MI-től

В 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.