C++
关于虚析构函数
关于虚析构函数
实例:
#include <iostream>
using namespace std;
class Base
{
public:
Base();
~Base(){ cout<< "Base destructor\n"; delete b_pointer; }
private:
int *b_pointer;
};
Base::Base()
{
b_pointer=new int(0);
}
class Derived: public Base
{
public:
Derived();
~Derived();
private:
int *i_pointer;
};
Derived::Derived()
{ i_pointer=new int(0); }
Derived::~Derived()
{
cout<< "Derived destructor\n";
delete i_pointer;
}
void fun(Base* b)
{ delete b; }
int main()
{
Derived *b=new Derived();
fun(b);
return 0;
}
结果:Base destructor
如果在~Base()函数前加上virtual,
结果:Base destructor
Derived destructor
如果不把派生类析构掉,造成了内存泄露。
对于内存需求量比较大,长期连续运行的程序来说,如果持续发生这样的错误,最终将导致因内存不足而引起的程序终止。