首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请教c++高手一个关于虚析构函数的有关问题用的是vc6.0

2012-03-17 
请问c++高手一个关于虚析构函数的问题用的是vc6.0#include iostream#include stringusingnamespacestd

请问c++高手一个关于虚析构函数的问题用的是vc6.0
#include <iostream>
#include <string>
using   namespace   std;

class   Point
{public:
Point(){}
~Point(){cout < < "executing   Point   destructor " < <endl;}
};

class   Circle:public   Point
{public:
Circle(){}
~Circle(){cout < < "executing   Circle   destructor " < <endl;}
private:
int   radius;
};


int   main()
{
Point   *p   =   new   Circle;
delete   p;
return   0;
}


输出的结果是:execting   Point   destructor
为什么没有先调用派生类的析构,而是直接调用了基类的析构函数??
如果程序中~Point(){cout < < "executing   Point   destructor " < <endl;}将其声明为
virtual~Point(){cout < < "executing   Point   destructor " < <endl;}则会先调用派生类的析构函数然后调用基类的析构函数?是不是因为这里用到了new和delete的原因吗??
实在是不懂谢谢高手帮我解答了!



[解决办法]
为何需要虚析构函数?
当你可能通过基类指针删除派生类对象时
如果你打算允许其他人通过基类指针调用对象的析构函数(通过delete这样做是正常的),并且被析构的对象是有重要的析构函数的派生类的对象,就需要让基类的析构函数成为虚拟的。
[解决办法]
当没有加virtual的时候,因为在delete的时候,只会执行主体Point的析构函构函数;而virtual的作用就是在于,当基类指针指向派生类时候,可以按派生类的virtual类型函数执行;所以加了virtual以后就会先执行派生类析构,然后基类西沟。
[解决办法]
虚函数的作用。
动态查找,调用合适的函数

~Point()加virtual修饰,析构时会根据指向的具体对象,调用该对象的析构。
若没加,调用的就只是~Point()

热点排行