C++内存泄露的有效预防方法:谁使用,谁删除 (1.2)
2015-02-21 21:39
253 查看
内存泄露就是new出来的东西没有delete,我们能够这样:创建动态对象的人虽然使用new来创建对象;使用此对象的人负责释放此内存块。
比如:我和他人共享一个消息队列,他人将消息(new出来的对象)放到消息队列中,他不负责释放;我从消息队列里取消息,我一旦从消息队列里取出一个消息,消息队列里就不再有这个消息,消息的控制权和全部权都在我手上,我在用完之后就应该delete。这样就保证了代码编写的简单话,仅仅要大家都尊周这个简单的方法就能够保证没有内存泄露。
再比如:ACE中有个ACE_Message_Block,就仅仅见有各种new,但没见到delete,当时看演示样例肿么都认为郁闷,于是自己小心翼翼的delete,搞到最后几次反复delete还把程序搞挂了。尼玛。当时仅仅是知道教程上说要用release方法来释放,如今感觉应该是懂了。由于ACE_Message_Black是使用了消息计数的,所以要用自己的成员方法release方法来释放内存。
上面仅仅是消息队列使用的一个样例,有些情景没有这么典型。比方,有可能是你自己创建自己使用,自己释放,但仅仅要想着这个原则,就能够非常easy从业务上发觉什么时候该释放了。
有个Linux的工具能够測试你的程序有没有内存泄露:Linux下C++内存泄露检測工具及用法
比如:我和他人共享一个消息队列,他人将消息(new出来的对象)放到消息队列中,他不负责释放;我从消息队列里取消息,我一旦从消息队列里取出一个消息,消息队列里就不再有这个消息,消息的控制权和全部权都在我手上,我在用完之后就应该delete。这样就保证了代码编写的简单话,仅仅要大家都尊周这个简单的方法就能够保证没有内存泄露。
再比如:ACE中有个ACE_Message_Block,就仅仅见有各种new,但没见到delete,当时看演示样例肿么都认为郁闷,于是自己小心翼翼的delete,搞到最后几次反复delete还把程序搞挂了。尼玛。当时仅仅是知道教程上说要用release方法来释放,如今感觉应该是懂了。由于ACE_Message_Black是使用了消息计数的,所以要用自己的成员方法release方法来释放内存。
上面仅仅是消息队列使用的一个样例,有些情景没有这么典型。比方,有可能是你自己创建自己使用,自己释放,但仅仅要想着这个原则,就能够非常easy从业务上发觉什么时候该释放了。
有个Linux的工具能够測试你的程序有没有内存泄露:Linux下C++内存泄露检測工具及用法
相关文章推荐
- C++使用STL:慎重选择删除元素的方法
- Linux下使用Vi时方向键变乱码、删除键不能使用的解决方法(亲测有效)
- C++使用STL:慎重选择删除元素的方法
- Linux下使用Vi时方向键变乱码、删除键不能使用的解决方法(亲测有效)
- C++指针使用方法解惑
- [转]C++指针使用方法解惑
- C++中typename关键字的使用方法和注意事项
- 用Visual C++.NET使用GDI+的一般方法
- [C++]实验八:学习类的聚集使用方法
- 为什么使用ADO Data控件的Delete方法无法删除DataGrid控件中的数据
- C++指针使用方法解惑
- C++指针使用方法(转)
- 使用IDispatch::Invoke函数在C++中调用C#实现的托管类库方法
- C++中Static作用和使用方法
- 删除文件提示文件正在被另一个人或程序使用的解决方法
- tinyxml的使用方法(c++)
- C++指针使用方法解惑
- C++指针使用方法解惑
- 关于使用sql删除数据库重复的数据的方法整理:
- [转]C/C++时间函数使用方法