四十、继承与派生:派生类的析构函数

本文通过一个 C++ 多继承示例详细解释了派生类析构函数的调用顺序,并展示了如何正确地清理派生类中新增的资源及内嵌对象资源。在 C++ 中,派生类不会继承基类的析构函数,因此需要明确地定义派生类的析构函数来释放派生类新增成员所占用的资源。
	同样派生类不能继承基类析构函数,所以需要的话就要定义派生类自己的析构,派生类只需清理新增成员就可以,至于基类和内嵌对象,系统自动调用基类和内嵌对象成员的析构函数。
调用顺序,我们只要记得和构造顺序相反就可以:
	1、清理派生类新增成员   2、调用内嵌对象成员所属类的析构  3、调用基类析构
上述如果涉及多个基类或内嵌对象,同样遵循与构造函数执行时相反的顺序。
#include<iostream>
using namespace std;
class Base1
{
public:
	Base1(){cout<<"Base1 construct"<<endl;} //默认构造
	~Base1(){cout<<"Base1 析构"<<endl;} 
};
class Base2
{
public:
	Base2(int x){cout<<"Base2 construct"<<x<<endl;} 
	//带参数,派生类构造必须给出基类名和参数表
	~Base2(){cout<<"Base2 析构"<<endl;}
};
class Base3
{
public:
	Base3(int x){cout<<"Base3 construct"<<x<<endl;}
	~Base3(){cout<<"Base3 析构"<<endl;}
};
class Derived : public Base2,public Base3,public Base1 //公有继承,注意声明顺序
{
public:
	Derived(int i,int j,int k,int l):b2(i),Base3(k),Base2(j),b3(l){};
	//遵循先基类后内嵌,同类型的调用依照声明顺序,具体参数值查看参数表
	//基类Base2->Base3->Base1   内嵌对象Base1->Base2->Base3

private:
	Base1 b1;  //内嵌成员,注意声明顺序
	Base2 b2;
	Base3 b3;
};
int main()
{
	Derived d(1,2,3,4);
	return 0;
}

/*  中心对称
输出结果:
Base2 construct2
Base3 construct3
Base1 construct
Base1 construct
Base2 construct1
Base3 construct4
Base3 析构
Base2 析构
Base1 析构
Base1 析构
Base3 析构
Base2 析构
*/


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值