首页 > 其他 > 详细

继承时的析构函数

时间:2020-07-05 09:15:03      阅读:66      评论:0      收藏:0      [点我收藏+]

假设A是一个接口类,有一个析构函数是~A;然后B类继承并实现了了A,有一个析构函数~B。内存释放有如下几种情况:

1、A的析构函数是虚函数,父指针或子指针指向子对象

virtual ~A(){}
A* a = new B;//或者B* a = new B;
delete a;

释放顺序是~B,~A。因为用到了多态,编译器根据实际数据进行调用【即new B--->B】,故先调用~B,根据析构顺序再调用~A

2、A的析构函数不是虚函数,父指针指向子对象

~A(){}
A* a = new B;
delete a;

释放顺序是~A,不没有~B。因为没用到多态,编译器根据数据类型【即A】进行释放,故只调用~A

3、A的析构函数不是虚函数,子指针指向子对象

~A(){}
B* a = new B;
delete a;

释放顺序是~B,~A。因为用到了多态,编译器根据实际数据进行调用【即new B--->B】,故先调用~B,根据析构顺序再调用~A

继承时的析构函数

原文:https://www.cnblogs.com/judes/p/13237423.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!