C++内存管理(一)
来源:互联网 发布:大型网络3d游戏排行榜 编辑:程序博客网 时间:2024/05/22 15:50
这个题目比较大,估计我也写不全了,想到哪就算到哪。
为什么要想写这个呢?新出来的语言,Java/.NET的各种语言/Python/Lua等等,几乎都有自动内存管理。可是C++这么老,而且很底层的语言,对动态内存管理的支持就不好。写C++程序的时候,需要更加小心,才不会出错。
看下面的例子:
就算是这么简单的一段程序,要想写对都不那么容易。可以想象,实际工作中,一定需要一个学习的过程才能掌握内存管理的技巧。
上面这段代码,问题就出在没有处理异常。异常是一种隐式的跳转,经常不被注意到。但实际上,明显的改变执行路径的语句,也会被忽略。比如,你在上面的create和delete中间,加了一句测试:某种情况下,直接返回。问题就出来了,后面的delete没有被执行到。
一般来说,这么简单的地方,大家都能看得到,会在return之前加上delete。但是:
为什么要想写这个呢?新出来的语言,Java/.NET的各种语言/Python/Lua等等,几乎都有自动内存管理。可是C++这么老,而且很底层的语言,对动态内存管理的支持就不好。写C++程序的时候,需要更加小心,才不会出错。
看下面的例子:
File* file=SystemFactory::createFile(fileName); //谁也不知道,这里会不会返回NULL指针
InitData(file); //C++没有好办法让你知道,这里会不会抛出异常
delete file; //很好,你记得要delete掉他
//但不幸的是,这不能保证程序能正确的管理内存
InitData(file); //C++没有好办法让你知道,这里会不会抛出异常
delete file; //很好,你记得要delete掉他
//但不幸的是,这不能保证程序能正确的管理内存
上面这段代码,问题就出在没有处理异常。异常是一种隐式的跳转,经常不被注意到。但实际上,明显的改变执行路径的语句,也会被忽略。比如,你在上面的create和delete中间,加了一句测试:
if (XYZW) return;
一般来说,这么简单的地方,大家都能看得到,会在return之前加上delete。但是:
- 把同样的代码重复很多次,不是一个好的编码风格
- 如果中间的代码越加越多,你就越来越容易忘掉。也就是说,这样的代码难于维护。
- C内存管理一 概述
- C内存管理一 概述
- C内存管理一 概述
- 内存管理(一)
- 内存管理(一)
- 内存管理(一)
- 内存管理(一)
- 内存管理(一)
- Objective C内存管理进阶(一):实践准则
- Objective-C内存管理与原理剖析(一)基本原理
- Objective C内存管理进阶(一):实践准则
- Objective C内存管理进阶(一):实践准则
- Objective-C内存管理教程和原理剖析(一)
- Objective-C内存管理之引用计数(一)
- Objective-C 基础知识之 (十六):内存管理原则一
- ios学习--Objective C内存管理进阶(一): Iphone开发内存管理的理解
- c语言指针初探 一 内存管理
- object-c内存管理(一) MRC
- 国际运营商ICT服务发展现状及策略分析
- sqlserver2000 sp3的问题总结
- 流程设计和优化原则
- BLOXORZ 游戏攻略
- document.all、document.layers用法
- C++内存管理(一)
- 常用图形学名词解释
- 软件项目的绩效考核、难点及公司利润分析
- MSN协议中文释义(Zz)
- Oracle SQL性能优化
- PowerDesign使用小技巧
- 不要为3d而3d
- 70.80.90后
- 网页CSS样式行间距设定