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

析构函数可以为什么可以定义为虚函数,能否写个最简单的程序让小第看下呢,该怎么解决

2012-03-07 
析构函数可以为什么可以定义为虚函数,能否写个最简单的程序让小第看下呢析构函数可以为什么可以定义为虚函

析构函数可以为什么可以定义为虚函数,能否写个最简单的程序让小第看下呢
析构函数可以为什么可以定义为虚函数,能否写个最简单的程序让小第看下呢
看了书上的一些关于虚函数的小例子,也看不出究竟虚函数,用在什么地方比较好.大家帮忙解释下,谢谢,

[解决办法]
继承后,基类指针指向子类对象,
如果基类析构没有设置成virtual,那么就只会调用基类的析构函数
如果设置成virtual,会调用子类对象的析构函数。
[解决办法]
不是为什么“可以”,而是为什么“需要”或者为什么“必须”

例子:

class A
{
public:
~A(){};
};

class B:public A
{
char * p;
public :
B(){p=new char[100];};
~B(){delete []p;};
};

下面代码因为~A不是虚函数导致系统不知道该析构B,导致内存泄漏

A* pb= new B;
delete pb;
当且仅当A的析垢函数是虚函数,系统才会调用B的析垢,明白了不?
[解决办法]
class base
{
public:virtual ~base(){}
}
class derive1 : public base{}
class derive2 : public base
{
int* p;
public:
derive2(int x):p(new int[x]){}
~derive2(){delete[]p;}
}
void main()
{
base* p;
p = new derive1();
delete p;
p = new derive2();
delete p;
}

热点排行