当前位置:首页 > 编程开发

虚析构函数

webgou17年前 (2010-01-07)编程开发119
[B]虚析构函数[/B] 在析构函数前面加上关键字virtual进行说明,称该析构函数为虚析构函数。例如: class B { virtual ~B(); … }; 该类中的析构函数就是一个虚析构函数。 如果一个基类的析构函数被说明为虚析构函数,则它的派生类中的析构函数也是虚析构函数,不管它是否使用了关键字virtual进行说明。 说明虚析构函数的目的在于在使用delete运算符删除一个对象时,能保析构函数被正确地执行。因为设置虚析构函数后,可以采用动态联编方式选择析构函数。 下面举一个用虚析构函数的例子。 #include class A { public: virtual ~A() { cout<<"A::~A() Called.\n"; } }; class B : public A { public: B(int i) { buf = new char[i]; } virtual ~B() { delete [] buf; cout<<"B::~B() Called.\n"; } private: char * buf; }; void fun(A *a) { delete a; } void main() { A *a = new B(15); fun(a); } 执行该程序输出如下结果: B::~B() Called. A::~A() Called. 如果类A中的析构函数不用虚函数,则输出结果如下: A::~A() Called. 当说明基类的析构函数是虚函数时,调用fun(a)函数,执行下述语句: delete a; 由于执行delete语句时自动调用析构函数,采用动态联编,调用它基类的析构函数,所以输出上述结果。 当不说明基类的析构函数为虚函数时,delete隐含着对析构函数的调用,故产生 A::~A() Called. 的结果。

扫描二维码推送至手机访问。

版权声明:本文由知了博客发布,如需转载请注明出处。

本文链接:https://www.webgou.info/?id=108

分享给朋友:

“虚析构函数” 的相关文章

Android应用技巧总结

1.Drawable的使用最经常会处理Drawable作为类型的资源回收绘制到屏幕上的东西; Drawable类提供了一个通用的API来处理一个基本的视觉资源,可以采取多种形式。(讲的有点抽象)讲白点就是获取res下的参数例:改变TextView文字颜色-引用Drawable颜色常熟及背景色valu…

Android实现全屏正确方法介绍

Android手机操作系统是由谷歌推出的一款基于Linux的开源手机操作系统。我们可以在模拟器中对其进行相应的操作来实现各种功能以满足用户的需求。在这里就简要介绍一下Android实现全屏的相关方法。新版本的Android Framework和老版本的实现起来有些不同。这里只给出新版本的Androi…

Apple新闻之在线收音机 “微电台” 开始支持 Mac,苹果电脑用户可以听国内广播电台的节目了

    听广播曾是国内苹果电脑用户面临的中国特色难题之一,没有收音机软件,网页版电台又都要求你装 “Windows Media Player”。今天得到并验证了一个好消息:新浪微博配套的在线收音机应用 “微电台” 开始支…

MyEclipse 中SVN 中的安装

MyEclipse 中SVN 中的安装 1. 这里介紹Eclipse的SVN Plugin,叫做Subclipse,官方网站的下载地址在 ...…

对话框工具栏 DialogBar

一、创建DialogBar的派生类 首先,创建对话框资源:在对话框资源编辑器内生成一个Dialog资源,并将其风格(Style)属性必须设置为Child,不能设置为Overlapped或Popup,否则运行肯定出错;至于边界属性则随用户自己喜欢,一般都是选择None。其余属性也随用户选择,一般没有特…

wince去掉串口0的DEBUG模式,改为普通模式

 l 目前wince的串口0是作为调试串口用的,…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。