C++编程如何避免memery leak

来源:互联网 发布:php发短信 编辑:程序博客网 时间:2024/04/28 12:33

项目中遇到到了内存泄露的问题,结果大家辛苦的对应了十日,挺痛苦的,所以自己想了想如何避免呢?总结如下:

 1. 尽可能的让你的函数就一个出口(当然做不到也要尽可能的简单化,建议可以使用do{...}while(false)来实现函数的一个出口),这样做的好处是保证在函数的出口作所有内存的释放,另一个好处是程序的易维护性。

 2. 类的属性成员的内存释放,一定要在类的析构函数里进行统一释放,不要在类的其它函数里去做,当然申请内存应该在构造函数里进行。理由:自动管理,多么省心呀~

 3. 在使用指针的时候一定要先判断,后使用。注意:当用new或malloc等来申请内存时,一定要判断申请是否成功,当然在当今虚拟内存的技术下,可以理解内存空间是无限的(硬盘+内存),但是在某些特殊的情况下仍然有申请失败的可能~

 4. [1]避免数组和指针的越界

     [2]new和delete,new[]和delete[],malloc和free的使用匹配

     [3]避免对同一内存释放多次

     [4]避免用return返回局部变量的引用和指针

 5. 避免“野指针”,“野指针”是指是指向“垃圾”内存的指针。产生的原因有3:指针变量没有初始化;指针被释放后没有将指针置为NULL;指针操作超出它的作用域。

 6. 对资源的使用可以用RAII(Resource Acquisition Is Initialization)资源获取即初始化。就是利用对象的生命周期来控制程序的资源,最简单就是申请资源在构造函数中进行,释放资源在析构函数中进行,这样我们对资源的使用就达到自动控制了,但是为了资源使用完立即释放,最好将对象定义成局部的块变量!

 7. Smart Pointers技术,(智能指针)是存储“指向动态分配(在堆上)的对象的指针”的对象。他们的行为很像 C++ 的内建指针,只是它们可以在适当的时候自动删除它们所指向的对象。智能指针在面对异常时有非常显著的作用,它们可以确保动态分配对象的完全析构。

原创粉丝点击