c++继承组合中构造析构顺序
构造是由内而外,析构是由外而内。
即构造时依次调用基类、组合类、派生类的构造函数;析构时逆序调用。
基类析构函数需要声明为virtual
原因
虚函数是动态绑定的基础,这样当使用基类指针管理派生类对象时,析构时才回调用到派生类的析构函数,否则只能调用基类的析构函数,可能造成内存泄漏。
测试结果
以下为基类析构函数非virtual时的测试情况。
-
派生类对象
Base constructor
Component constructor
Derived constructor
Derived destructor
Component destructor
Base destructor -
派生类指针管理派生类对象
Base constructor
Component constructor
Derived constructor
Derived destructor
Component destructor
Base destructor -
基类指针管理派生类对象
Base constructor
Component constructor
Derived constructor
Base destructor