虚析构函数
来源:互联网 发布:移动数据网怎么转电信 编辑:程序博客网 时间:2024/04/30 23:06
Class A{}
ClassB:public A{}
ClassC:public B{}
在一般的使用下,如C c;如果存在继承派生关系,当构造一个子类对象时,会先从最上层先调用基类的构造函数构造基对象,然后逐步往下,最后调用子类的构造函数完成子类对象的构造,而当销毁子类对象时,会按照相反顺序,先调用子类的析构函数,然后调用基类的析构函数,最后完成一个对象的析构。
注意,这是正常的使用情况下的方式,这种多态用得最简单。
但是,考虑一种情况,当你通过一个基类的指针去析构一个子类对象时,会发生什么情况呢?如A *p = new C();delete p;结果显而易见,这样的析构只会调用基类的析构函数,而没有调用子类的析构函数,导致析构异常,因为非虚函数的调用是根据调用者的类型来寻址的,因为析构时给出的是基类的类型指针A*,所以当然会调用基类的析构函数,但是这种情况不是我们所希望的。
因此,这个时候就要用到虚析构函数了,而虚函数的调用是通过对象来决定的,因为虚函数是通过虚函数表来寻址的,而虚函数表又存储在对象当中,当把父类的析构函数声明为虚析构函数时,通过父类的指针去析构子类对象就不会发生析构异常,这样的析构会像正常情况下那样,会先调用子类的析构函数,然后调用父类的析构函数从而完成整个继承链上的析构,避免了析构异常的问题
- 虚析构函数、纯虚析构函数
- 虚析构函数,纯虚析构函数~~~
- 构造函数 虚函数 虚析构函数
- 虚析构函数、纯虚析构函数、虚构造函数
- 纯虚函数、虚函数、虚析构函数
- 虚析构函数、纯虚析构函数、虚构造函数
- 虚函数,虚析构函数,虚函数表
- 虚析构函数、纯虚析构函数、虚构造函数
- 虚析构函数
- 虚析构函数
- 虚析构函数
- 虚析构函数
- 虚析构函数
- 虚析构函数
- 虚析构函数
- 虚析构函数
- 虚析构函数
- 虚析构函数
- PHP+新浪微博开放平台+新浪云平台(SAE)开发微博应用——PHP SDK中Demo程序简析
- 补码乘法,补码乘法计算详细解说
- 对做IDE的一些思考
- 数组名和指针的区别
- DockPanel_2.4 WeifenLuo.WinFormsUI.Docking.dll的用法
- 虚析构函数
- 利用UtilityLibrary.dll WeifenLuo.WinFormsUI.Docking.dll控件创建工具栏效果
- 超好听的纯音乐
- poj 2181 (线段树)
- 如何制定计划
- Android读取SIM联系人信息
- Opentaps ERP+CRM 简介
- 关于命令行输入的控制
- jQuery :$([]).add() 在IE 下的不兼容