Рассмотрим порядок выполнения конструкторов/деструкторов, когда один класс наследуется другим. В таком случае конструкторы выполняются по порядку, начиная с самого базового класса. А когда происходит удаление объекта, то деструкторы выполняются начиная с вершины наследования (т.е. с самого последнего потомка)
![]() | |
Порядок выполнения конструктора и деструктора при наследовании |
#include <iostream> using namespace std; class A { public: A() { cout << "Constr A" << endl; } ~A() { cout << "Destr A" << endl; } }; class B: public A { public: B() { cout << "Constr B" << endl; } ~B() { cout << "Destr B" << endl; } }; int main() { B b; return 0; }Вывод:
Constr A Constr B Destr B Destr A
В слуаче, когда класс наследует более одного предка, то конструкторы предков выполняются в порядке их объявления - слева на право. В то время как деструкторы предков будут выполнятсья в обратном порядке их объявления - справа налево.
![]() |
Порядок выполнения конструктора и деструктора при множественном наследовании |
#include <iostream> using namespace std; class A { public: A() { cout << "Constr A" << endl; } ~A() { cout << "Destr A" << endl; } }; class B { public: B() { cout << "Constr B" << endl; } ~B() { cout << "Destr B" << endl; } }; class C: public A, public B { public: C() { cout << "Constr C" << endl; } ~C() { cout << "Destr C" << endl; } }; int main() { C c; return 0; }Вывод:
Constr A Constr B Constr C Destr C Destr B Destr AНа экран будет показано, что сначала выполнились конструкторы классов A, B, C, а потом выполнились деструкторы в порядке классов C, B, A.
Смотрите также:
Порядок выполнения конструктора и деструктора
Комментариев нет:
Отправить комментарий