析构函数为什么要用虚函数

析构函数为什么要用虚函数

北京一搜索挖掘公司:析构函数为什么要用虚函数

作用:一句话,避免内存泄漏!

用处:在公有继承中,基类对派生类及其对象的操作,只能影响到那些从基类继承下来的成员.如果想要用基类对非继承成员进行操作,则要把基类的这个函数定义为虚函数.

先看一段虚析构函数代码:

[cpp]
#include<iostream>
using namespace std;
class Base
{
public:
virtual ~Base()
{
cout<<“~Base”<<endl;
}
};

class Derived:public Base
{
public:
virtual ~Derived()
{
cout<<“~Derived”<<endl;
}
};

int main()
{
Base *pb = new Derived;
delete pb;
return 0;
}
[/cpp]

输出结果是:
~Derived
~Base
如果不是析构函数不是虚函数,输出结果是:
~Base

深入了解如下:
如果不需要基类对派生类及对象进行操作,则不能定义虚函数,因为这样会增加内存开销.当类里面有定义虚函数的时候,编译器会给类添加一个虚函数表,里面来存放虚函数指针,这样就会增加类的存储空间.所以,只有当一个类被用来作为基类的时候,才把析构函数写成虚函数.

One Reply to “析构函数为什么要用虚函数”