C++内存管理(一)
2008-01-24 19:13
155 查看
这个题目比较大,估计我也写不全了,想到哪就算到哪。
为什么要想写这个呢?新出来的语言,Java/.NET的各种语言/Python/Lua等等,几乎都有自动内存管理。可是C++这么老,而且很底层的语言,对动态内存管理的支持就不好。写C++程序的时候,需要更加小心,才不会出错。
看下面的例子:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
File* file=SystemFactory::createFile(fileName); //谁也不知道,这里会不会返回NULL指针
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
InitData(file); //C++没有好办法让你知道,这里会不会抛出异常
delete file; //很好,你记得要delete掉他
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//但不幸的是,这不能保证程序能正确的管理内存
就算是这么简单的一段程序,要想写对都不那么容易。可以想象,实际工作中,一定需要一个学习的过程才能掌握内存管理的技巧。
上面这段代码,问题就出在没有处理异常。异常是一种隐式的跳转,经常不被注意到。但实际上,明显的改变执行路径的语句,也会被忽略。比如,你在上面的create和delete中间,加了一句测试:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if (XYZW) return;
某种情况下,直接返回。问题就出来了,后面的delete没有被执行到。
一般来说,这么简单的地方,大家都能看得到,会在return之前加上delete。但是:
把同样的代码重复很多次,不是一个好的编码风格
如果中间的代码越加越多,你就越来越容易忘掉。也就是说,这样的代码难于维护。
我们有一些内存管理的技巧,首先是”检查并清除“(待续)
为什么要想写这个呢?新出来的语言,Java/.NET的各种语言/Python/Lua等等,几乎都有自动内存管理。可是C++这么老,而且很底层的语言,对动态内存管理的支持就不好。写C++程序的时候,需要更加小心,才不会出错。
看下面的例子:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
File* file=SystemFactory::createFile(fileName); //谁也不知道,这里会不会返回NULL指针
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
InitData(file); //C++没有好办法让你知道,这里会不会抛出异常
delete file; //很好,你记得要delete掉他
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//但不幸的是,这不能保证程序能正确的管理内存
就算是这么简单的一段程序,要想写对都不那么容易。可以想象,实际工作中,一定需要一个学习的过程才能掌握内存管理的技巧。
上面这段代码,问题就出在没有处理异常。异常是一种隐式的跳转,经常不被注意到。但实际上,明显的改变执行路径的语句,也会被忽略。比如,你在上面的create和delete中间,加了一句测试:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if (XYZW) return;
某种情况下,直接返回。问题就出来了,后面的delete没有被执行到。
一般来说,这么简单的地方,大家都能看得到,会在return之前加上delete。但是:
把同样的代码重复很多次,不是一个好的编码风格
如果中间的代码越加越多,你就越来越容易忘掉。也就是说,这样的代码难于维护。
我们有一些内存管理的技巧,首先是”检查并清除“(待续)
相关文章推荐
- C/C++内存管理详解 堆 栈
- 内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C++][内存管理][转载]
- C++内存管理变革
- C++内存管理
- c++内存管理 03
- C++内存管理
- C++ 内存管理
- new、delete、指向连续空间的指针、数组、空间释放、空间申请[C++][内存管理]
- C++内存管理
- C++ 内存管理之一(变量)
- c++ 基础知识(输入输出、namespace命名空间、引用、函数重载模版、内存管理)
- 经典收藏 C++内存管理操作详解
- C++内存管理学习
- C++内存管理详解
- 经典收藏 C++内存管理操作详解
- 【linux编程】C++内存管理详解
- C/C++内存管理详解
- [转]C++中的内存管理(new、delete、内存泄漏)
- C++内存管理详解
- C++内存管理详解