博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多重继承中的虚析构函数
阅读量:6388 次
发布时间:2019-06-23

本文共 1186 字,大约阅读时间需要 3 分钟。

  hot3.png

class A{public:    A(){cout<<"A constructor"<
<< endl; B* pb = new D; delete pb; return 0;}

/* 首先基类A,B均有虚析构函数,所以会沿着析构函数链进行析构,不会存在对象部分析构的情况。
另外,请注意多重继承中声明次序和构造/析构的次序
class C:public A,public B===>
A constructor   构造次序:先基类,后子类;基类的构造次序为先A,后B
B constructor
C constructor
C destructor    析构次序:先子类,后基类;基类的析构次序为先B,后A
B destructor
A destructor
===========
class D:public B,public A===>
B constructor   构造次序:先基类,后子类;基类的构造次序为先B,后A
A constructor
D constructor
D destructor    析构次序:先子类,后基类;基类的析构次序为先A,后B
A destructor
B destructor
*/
几种可能:
A,B类中均没有虚析构函数
class A{public:    A(){cout<<"A constructor"<

A* pt = new C;delete pt;

输出结果:
A constructor
B constructor
C constructor
C destructor
B destructor
A destructor
只在其中一个类中存在虚析构函数
class A{public:    A(){cout<<"A constructor"<
B* pa = new C;delete pa;

输出结果:
A constructor
B constructor
C constructor
C destructor
B destructor
A destructor
============================
class A{public:    A(){cout<<"A constructor"<

输出结果:
A constructor
B constructor
C constructor
A destructor
观察输出,我们可以得到如下结论:
无论多重继承中的基类任然需要遵循Effective C++中基类的设计原则---如果一个类被作为基类使用,需要提供虚析构函数。
对于多重继承中没有虚析构的基类,如果用基类指针操作子类对象那么会出现资源泄露。

转载于:https://my.oschina.net/qihh/blog/57685

你可能感兴趣的文章
String类的学习
查看>>
linux正则表达式sed
查看>>
jenkins+docker的简单项目部署
查看>>
SQL 基础之去重和显示表结构(四)
查看>>
excel学习笔记之一
查看>>
selenium--字符串/整型问题Can't convert 'int' object to str implicitly提示解决方法
查看>>
linux内核的syslets补丁
查看>>
Python多线程threading用法
查看>>
基于Struts 2的自定义类型转换器
查看>>
禁用windows更新完成后的重启提示
查看>>
Windows启动文件的详细介绍
查看>>
持久性session连接之memcached高可用方案
查看>>
curl用法:获取网站的header头及状态码
查看>>
Linux常用的基本命令02
查看>>
[cocos2d-x]图层的旋转缩放效果
查看>>
Java实现文件拷贝
查看>>
ExtJS4.2学习(八)表格限制输入数据的类型
查看>>
五个超酷Linux命令
查看>>
Hyper-v Server重复数据删除技术
查看>>
RUP大讲堂(第一讲):RUP简介及软件过程改进
查看>>