您的位置:首页 > 其它

菜鸟成长之虚析构函数

2011-10-20 09:55 363 查看
如果一个类需要作为其他类的父类,则需要把该类的析构函数设置为虚函数。下面以一个例子来说明必要性。

#include<iostream>

using namespace std;

class Base

{

public:

    virtual ~Base()

    {

        cout<<"Base destruction"<<endl;

    }

};

class Derived:public Base

{

public:

    ~Derived()

    {

        cout<<"Derived destruction"<<endl;

    }

};

int main()

{

    Base *pb=new Derived();

    delete pb;

    return 0;

}

如果父类的析构函数不是虚函数,而且使用了new运算符在堆上动态的分配了该子类的对象,如果使用delete运算符删除该对象,则不会调用子类的析构函数。如果在子类中动态的分配了内存,则会出现内存泄漏的情况。但是如果将父类的析构函数设置为虚函数,则子类的虚构函数会被调用。在例子中如果删除virtual,则只会打印Base destruction。如果加上virtual则会先打印Derived destruction,再打印Base destruction。

如果使用子类的指针指向该对象,并调用delete则不会出现这种情况。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  delete class