C++

关于虚析构函数

2010/12/10

关于虚析构函数

实例:

#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

如果不把派生类析构掉,造成了内存泄露。

对于内存需求量比较大,长期连续运行的程序来说,如果持续发生这样的错误,最终将导致因内存不足而引起的程序终止。