>
01
网站首页
>
02
有本日记
>
03
古城童话
>
04
技术笔记
>
05
相框相册
>
0A
可能是我
>
0B
写张纸条
>
0C
友情链接
京ICP备06059428号
虚析构函数[转]
古城
@ 2007.11.11
分类:
技术笔记
点击:2172
评论:0
在析构函数前面加上关键字virtual进行说明,称该析构函数为虚析构函数。例如:
class B
{
virtual ~B();
…
};
该类中的析构函数就是一个虚析构函数。
如果一个基类的析构函数被说明为虚析构函数,则它的派生类中的析构函数也是虚析构函数,不管它是否使用了关键字virtual进行说明。
说明虚析构函数的目的在于在使用delete运算符删除一个对象时,能保析构函数被正确地执行。因为设置虚析构函数后,可以采用动态联编方式选择析构函数。
下面举一个用虚析构函数的例子。
#include <iostream.h>
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.
的结果。
上一篇:
STL中map用法详解[转]
下一篇:
CDC和HDC的区别与转换
本文评论
发表评论
你的评论
← 填你的
昵称
← 这里填
↓
以下内容
非必填
,可根据需要填写
← 可以展示在你的评论上方
← 不会在页面展示
← 不会在页面展示
← 只给我看?勾选上
[
提交
]
这是一个别人称之为
角落
的世界
幸而,它的确是我的世界