如果基类中存在一个指向动态分配内存的成员变量,并且基类的析构函数中定义了释放该动态分配内存的代码,那么就应该将基类的析构函数声明为虚函数,这样可以将子类对象中的开辟的动态空间回收。
#include <iostream>
using namespace std;
class Base{
private:
int *a;
public:
Base();
virtual ~Base(){ cout<<"Base destructor"<<endl; }
};
Base::Base(){
a = new int[100];
cout<<"Base constructor"<<endl;
}
class Derived: public Base{
private:
int *b;
public:
Derived();
~Derived( ){ cout<<"Derived destructor"<<endl; }
};
Derived::Derived(){
b = new int[100];
cout<<"Derived constructor"<<endl;
}
int main( ){
Base *p = new Derived;
delete p;
return 0;
}
运行截图
