C++内存管理(一)

来源:互联网 发布:大型网络3d游戏排行榜 编辑:程序博客网 时间:2024/05/22 15:50
这个题目比较大,估计我也写不全了,想到哪就算到哪。

为什么要想写这个呢?新出来的语言,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。但是:
  • 把同样的代码重复很多次,不是一个好的编码风格
  • 如果中间的代码越加越多,你就越来越容易忘掉。也就是说,这样的代码难于维护。
我们有一些内存管理的技巧,首先是”检查并清除“(待续)
原创粉丝点击