如果自己设计的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可加可不加。
C++继承类中析构函数的问题
最新推荐文章于 2024-07-25 14:57:19 发布