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

【C++】内存泄漏问题

2012-04-24 20:40 375 查看
C++里面有关内存泄漏的问题应该挺多的,接着上一篇文章后面,介绍一种内存泄漏,以后遇见了别的,继续往后添加
首先看下面一段程序

class Base{
public:
~Base();
};
Base::~Base(){
cout<<"Base destructor"<<endl;
}
class Derived:public Base{
public:
Derived();
~Derived();
private:
int *p;
};
Derived::Derived(){
p=new int(0);
}
Derived::~Derived(){
cout<<"Derived destructor"<<endl;
delete p;
}
void fun(Base *b){
delete b;
}
int main(){
Base *b=new Derived();
fun(b);
}


运行结果是:Base
destructor
上面这段程序为什么会造成内存泄漏呢?原因出在Base *b=new Derived();由于Base类里面并没有虚函数,所以指针b不能指向Derived类的成员,但是new Derived()已经生成了一个Derived类对象,在下面执行fun(b)的时候,b指向的是Base类对象,并不会析构生成的Derived对象。所以这边便会造成内存泄漏。解决方法就是讲Base类里面的析构函数改为虚析构函数,因为析构函数设置为虚函数之后,Base类的指针可以动态绑定了,实现运行时多态,保证使用基类类型的指针能够调用适当的析构函数针对不同的对象进行清理工作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息