【C++】内存泄漏问题

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类的指针可以动态绑定了,实现运行时多态,保证使用基类类型的指针能够调用适当的析构函数针对不同的对象进行清理工作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值