首页 > 其他 > 详细

构造函数,析构函数在派生类中的执行顺序,和继承虚函数的结合,为什么会有虚析构函数?

时间:2020-04-28 20:53:08      阅读:63      评论:0      收藏:0      [点我收藏+]

派生类在创建对象时会先调用基类的构造函数,调用的顺序和继承基类的顺序相同,然后才会调用自己的构造函数。

在派生类中,析构函数各部分的执行顺序和构造函数的调用顺序刚好相反,即派生类的析构函数先对其新增的一般成员进行析构,然后对新增的成员对象进行析构,最后按照与其“继承基类相反的顺序”调用基类的析构函数。

当一个类有派生类时,该类的析构函数必须是虚析构函数,否则会有资源释放不完全的问题。

虚析构函数的作用就是可以使用基类指针删除派生类对象。

定义一个基类指针p,在delete p时,如果基类的析构函数是虚函数,这时只会看到p所赋值的对象,如果p赋值的对象是派生类对象,就会调用派生类的析构函数,再调用基类的析构函数。如果p赋值的对象是基类对象,就会调用基类的析构函数,这样就可以避免内存泄露。

如果基类的析构函数不是虚函数,在delete p的时候调用析构函数,只会看到指针的数据类型,而不会去看赋值的对象类型,这样就会造成内存泄露。

参考:https://www.cnblogs.com/duwenxing/p/7483133.html

https://blog.csdn.net/xld_hung/article/details/76776497

构造函数,析构函数在派生类中的执行顺序,和继承虚函数的结合,为什么会有虚析构函数?

原文:https://www.cnblogs.com/conanpeng/p/12795805.html

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