您的位置:首页 > 编程语言 > C语言/C++

C++内存管理(一)

2008-01-24 19:13 155 查看
这个题目比较大,估计我也写不全了,想到哪就算到哪。

为什么要想写这个呢?新出来的语言,Java/.NET的各种语言/Python/Lua等等,几乎都有自动内存管理。可是C++这么老,而且很底层的语言,对动态内存管理的支持就不好。写C++程序的时候,需要更加小心,才不会出错。
看下面的例子:


File* file=SystemFactory::createFile(fileName); //谁也不知道,这里会不会返回NULL指针


InitData(file); //C++没有好办法让你知道,这里会不会抛出异常
delete file; //很好,你记得要delete掉他


//但不幸的是,这不能保证程序能正确的管理内存

就算是这么简单的一段程序,要想写对都不那么容易。可以想象,实际工作中,一定需要一个学习的过程才能掌握内存管理的技巧。

上面这段代码,问题就出在没有处理异常。异常是一种隐式的跳转,经常不被注意到。但实际上,明显的改变执行路径的语句,也会被忽略。比如,你在上面的create和delete中间,加了一句测试:


if (XYZW) return;

某种情况下,直接返回。问题就出来了,后面的delete没有被执行到。
一般来说,这么简单的地方,大家都能看得到,会在return之前加上delete。但是:

把同样的代码重复很多次,不是一个好的编码风格

如果中间的代码越加越多,你就越来越容易忘掉。也就是说,这样的代码难于维护。

我们有一些内存管理的技巧,首先是”检查并清除“(待续)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: