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

虚析构函数

webgou17年前 (2010-01-07)编程开发85
[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图片大小调整动态实现方法

Android操作系统中对于图片的操作我们在以前的文章中也有所介绍。不过对于图片的大小调整往往都局限于固定的调整。如何才能满足动态大小调整呢?我们在这里就为大家详细介绍有关Android图片大小调整的动态实现方法。昨天,动态获取图片资源获取的很爽啊,后来,换了一张png,128*128的,Run a…

TBS X5内核SDK静态集成jar完美解决方案

 前言:本篇文章用于解决TBSx5静态无法成功启动的问题...…

几种抠象技术理论试验-1 (Luma-Key,Chroma-Key)

几种抠象技术理论试验-1 (Luma-Key,Chroma-Key)…

firefox 缓存文件查看

firefox 缓存文件查看…

Bitcoin 的基本原理

昨天读到了 Bitcoin 的中文介绍,觉得非常有意思。不过上面这篇文章解释的非常不靠谱,我花了一晚上去Bitcoin的官方网站 仔细研究了一下,总算理解了其原理。感觉非常有启发,尤其是对虚拟货币的流通和发行有许多借鉴意义。今天写这篇 Blog 理一下。...…

Windows下mysql忘记root密码的解决方法

 Windows下mysql忘记root密码的解决方法 …

发表评论

访客

看不清,换一张

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