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

虚析构函数

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

分享给朋友:

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

任务和javac命令是相似,它编译两种类型

文章出自:http://xo-tobacoo.javaeye.com/blog/185019<javac>任务和javac命令是相似,它编译两种类型的java文件1)没有被编译的java文件2)曾经编译过,但是class文件版本和当前对应的java文件版本不匹配的java文件。1)jav…

关于 ATF : Adobe Texture Format

 dds2atf  是一个将dds转换成atf文件的工具,...…

Windows CE下流驱动的动态加载

Windows CE下流驱动的动态加载…

Android界面互调具体应用方式解析

在Android操作系统中,对于界面的一些操作是用户需要掌握的最基础的知识点。我们可以通过这篇文章对Android界面互调的方法介绍,来初步了解一下再Android系统中对于界面的一些应用技巧。...…

C栈的实现

C栈的实现…

mysql错误:error 0

今天想重装一下MYSQL,不过在安装进行到最后一步的时候总是无法启动服务,出现 ERROR 0 错误,在网上查了一下知道原来是当机子上以前装过MYSQL的话就会出现这个问题,可以在命令行下输入(sc delete mysql)来删除存在于系统中的MYSQL服务,但是照做之后仍然无法完成安装,于是我将…

发表评论

访客

看不清,换一张

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