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

C++继承类中析构函数的问题

2013-11-03 20:43 232 查看
如果自己设计的C++类体系中存在继承关系,请注意父子类的析构函数关键字设置。虚函数是在基类中被声明为 virtual,并在派生类中重新定义的成员函数,可实现成员函数的动态重载。 当一个类作为基类时,它的析构函数应该为虚析构函数(基类析构函数前加virtual关键字),这样才能保证调用子类的析构函数。
如过基类的析构函数不是虚析构函数,所以是根据指针的类型调用析构函数,而不是根据指针指向对象的类型调用析构函数,此时就不能执行子类的析构函数了。

#include <iostream>
using namespace std;
class CBase {
public:
CBase(int i){
m_data = i;cout << "Constructor of CBase. m_data=" << m_data <<endl;
}
virtual ~CBase(){
cout << "Destructor of CBase. m_data=" << m_data <<endl;
}
protected:
int m_data;
};
class CDerived: public CBase
{
public:
CDerived(const char *s): CBase(strlen(s)){
m_data = new char[strlen(s) + 1];
strcpy(m_data, s);
cout << "Constructor of CDerived. m_data = " << m_data << endl;
}
virtual ~CDerived(){
delete m_data;cout << "Destructor of CDerived. m_data = " << m_data <<endl;
}
private:
char  *m_data;
};
int main()
{
CBase  *p ;
p = new CDerived ("abcd");
delete p;
return 0;
}
 
基类的析构函数前必须加virtual关键字,如果一个子类可以保证不会作为其他类的父类出现,其析构函数前可以不加virtual关键字。上面的CDerived类中析构函数前的virtual可加可不加。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息