您的位置:首页 > 编程语言 > C语言/C++

一个类做为基类时,如果有析构函数,则析构函数必须是虚析构函数

2013-05-24 16:54 288 查看
        当一个类需要分配动态内存时就必须定义类析构函数。如果类被用作基类,则析构函数必须是虚析构函数。这是我们要通过基类指针维护对象表时必须要考虑的细微但重要的一点,如果基类的析构函数不是虚函数,则用基类指针指向的派生类对象的析构函数得不到执行,那么有派生类所生成的动态数据将得不到释放。

请看下面的例子:

class BasedCL
{
...
public:
BasedCL(...) ;  //申请7个元素的数组
~BasedCL() ;    //释放空间(非虚函数)
};
类DerivedCL继承BasedCL类并执行同样的操作:
class DerivedCL : public BasedCL
{
...
public:
DerivedCL(...) ;  //申请7个元素的数组
~DerivedCL() ;    //释放空间(非虚函数)
};

 

假设p是一个BasedCL类的指针,但被指向了一个动态的DeriverCL对象,我们调用delete函数:

 

BasedCL *p = new DerivedCL() ;    //建立一个DeriverCL对象
delete p ;                        //调用基类的析构函数 

 

由于派生类所生成的动态数据将不会被释放。如果基类的析构函数被声明成虚函数,那么派生类的析构函数将被调用。这种情况下也要调用基类的析构函数,但要等到派生类析构函数被调用之后。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 虚析构函数
相关文章推荐