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

虚析构函数

webgou17年前 (2010-01-07)编程开发262
[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

分享给朋友:

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

UTF-8, Unicode, GB2312格式串转换之C语言版

UTF-8, Unicode, GB2312格式串转换之C语言版       (申明:此文章属于原创,若转载请表明作者和原处链接 )         …

eclipse插件的三种安装方法

1、将插件直接拷贝到eclipse的plugins(有时候还包括features)目录下,然后重启一下eclipse,在eclipse的插件库中 (--˃Help-˃SoftWare Updates-˃Manager Configuration)就可以找到。重启的时候可以清除一下eclipse的缓存…

总结:用OleObject嵌入flash ocx

用OleObject嵌入flash ocx总结 用了好几天的时间,从从未接触com到知道用oleobject嵌入 flash ocx的过程。应该要注意下面几点: 1.实现ole 接口 2.用#import 加载 flash ocx ...…

Android文件系统深入剖析

用过Linux的朋友可能对开源的系统有一个非常好的印象。那么在日益成熟的手机操作系统中,有没有一款像Linux一样的开源系统呢?谷歌公司就退出了一款基于Linux平台的Android 操作系统来满足人们的需求。在这里大家可以先来了解一下Android文件系统的相关内容。1、Android文件系统的结…

MFC CFile

class CFile : public CObject { DECLARE_DYNAMIC(CFile) public: // Flag values enum OpenFlags { modeRead = (int) 0x00000, modeWrite =…

win32 api Event

win32 api Event…

发表评论

访客

看不清,换一张

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