При создании и удалении объекта в C++ выполняется несколько этапов:
Конструирование: от базового класса к производному.
Деструкторы вызываются в обратном порядке: от производного к базовому.
🚩Порядок вызова конструкторов
При создании объекта сначала создаются его базовые классы, затем члены класса, потом сам объект.
#include <iostream>
class Base {
public:
Base() { std::cout << "Конструктор Base\n"; }
~Base() { std::cout << "Деструктор Base\n"; }
};
class Derived : public Base {
public:
Derived() { std::cout << "Конструктор Derived\n"; }
~Derived() { std::cout << "Деструктор Derived\n"; }
};
int main() {
Derived obj;
}
Вывод
Конструктор Base
Конструктор Derived
Деструктор Derived
Деструктор Base
🚩Порядок вызова конструкторов для членов класса
Члены класса инициализируются в порядке их объявления в классе (а не в порядке в списке инициализации).
class A {
public:
A() { std::cout << "A()\n"; }
~A() { std::cout << "~A()\n"; }
};
class B {
public:
B() { std::cout << "B()\n"; }
~B() { std::cout << "~B()\n"; }
};
class C {
A a;
B b;
public:
C() { std::cout << "C()\n"; }
~C() { std::cout << "~C()\n"; }
};
int main() {
C obj;
}Вывод
A()
B()
C()
~C()
~B()
~A()
Ставь 👍 и забирай 📚 Базу знаний