C++中避免内存泄漏的几个绝招(二)
来源:互联网 发布:c 语言declaration 编辑:程序博客网 时间:2024/04/28 16:17
2. 成对使用new与delete时应采用相同的形式
一般来讲,new方法可以用于创建单对对象,也可以用于创建数组对象。同样,针对单个对象与数组,调用delete的形式也不尽相同。如下所示的一个例子,就是new与delete调用形式不匹配,从而造成内存没有成功释放。
string* sArray = new string[100];……delete sArray;
由于sArray是一个数组,因而上述的100个string对象,就必须调用100次析构函数才能完全释放内存,因而正确的做法是:
delete [] sArray;
因此,如果你在new表达式中使用[ ],必须在相应的delete表达式中也使用[ ]。如果你在new表达式中不使用[ ],那相应的delete表达式也不能使用[ ]。
3. 在独立的语句中构建智能指针
考虑到如下的函数:
void f(std::tr1::shared_ptr<A> pA(new A), fun());编译器在调用f函数的具体内容前,首先要处理被传递的各个实参。上述第一个参由两部分构成:执行new A,然后调用std::tr1::shared_ptr构造函数。所在编译器在调用f之前,必须做三件事:
1. 调用函数fun
2. 执行new A
3. 调用tr1::shared_ptr构造函数
然后,对于C++来讲,编译器的执行顺序是不确定的,如果最终的操作顺序是这样:
1. 执行new A
2. 调用函数fun
3. 调用tr1::shared_ptr构造函数
如果是这样,假如在调用函数fun时,发现了异常,此时new A返回的指针将会遗失,而且没有放入tr1::shared_ptr中,所以就可能在调用这个函数时引发内存泄漏。为了避免这种问题,一般采用两条语句来实现上述代码,如下:
std::tr1::shared_ptr<A> pA(new A);f(pA, fun());
- C++中避免内存泄漏的几个绝招(二)
- C++中避免内存泄漏的几个绝招(一)
- 在JNI编程中避免内存泄漏(二)
- Android中避免内存泄漏
- 避免内存泄漏的方法
- Android怎样避免内存泄漏的问题,不断补充中
- (转载)Java中关于内存泄漏出现的原因以及如何避免内存泄漏
- Java中关于内存泄漏出现的原因以及如何避免内存泄漏
- Java中关于内存泄漏出现的原因汇总及如何避免内存泄漏
- 在 JNI 编程中避免内存泄漏
- 在 JNI 编程中避免内存泄漏
- 在 JNI 编程中避免内存泄漏
- 在JNI 编程中避免内存泄漏
- 在 JNI 编程中避免内存泄漏
- 在 JNI 编程中避免内存泄漏
- 在JNI编程中避免内存泄漏
- 在JNI 编程中避免内存泄漏
- 在 JNI 编程中避免内存泄漏
- Android ArrayAdapter 详解
- java字符编码[转]
- jboss缓存清理
- 单元测试之moq
- android ListView几个比较特别的属性
- C++中避免内存泄漏的几个绝招(二)
- 文件
- Android中的ellipsize
- 境界
- 对String类型的小数进行取位数
- 快速判断文件是文本文件或二进制文件 .
- 一款自制的视频录制软件
- Heroku上Toto加载HTML页面不全问题解决办法
- 计算机分类: