首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

C++真的是一种容易造成内存泄漏的语言吗?解决办法

2012-01-28 
C++真的是一种容易造成内存泄漏的语言吗?看了一段SUN官方的Java语言介绍,其中一段如下:HTML codeh2在C,C

C++真的是一种容易造成内存泄漏的语言吗?
看了一段SUN官方的Java语言介绍,其中一段如下:

HTML code
<h2>在C,C++ 或其它语言中,程序员负责取消分配存储器。有时,这是一件很困难的事情。因为你并不事先知道存储器应在何时被释放。当在系统中没有能够被分配的存储器时,可导致程序瘫痪,这种程序被称作具有存储器漏洞。</h2>


但是我从来不会在应用中写这样的代码:
C/C++ code
void* pMemory = malloc(128);A* pa = new A;


我会包装一些东西:
C/C++ code
Memroy m(128);A a;


这样,无论是局部还是全局的,我从来不会考虑释放问题。如果需要提前释放资源,那些包装类里面会封装一个方法比如Release之类的。

对于到处new和delete或者free的程序员,我确实很不理解。

除非在写包装类的时候,这时候,你没有任何理由忘记释放资源吧(一般在析构里就可以了)。

在应用中(不是包装类的代码),我不会让原始的任何分配内存代码出现。

当然,有时候在简单的场合,比如测试之类,无须花时间去包装。

C++既然是面向对象的,那么使用free和new之类的代码出现在程序中(而非库中),其实是C程序员的写法。



[解决办法]
其实C++作为程序开发语言不仅运行效率高[接近汇编和C,相差不会超过10%],开发效率也不比Java和C#低多少[我认为相差也不会超过10%]。
但由于C++库没有Java和C#强大,所以C++程序员被迫要写很多Java和C#可以直接拿来用的东西,所以显得开发效率低了。想象一下,如果C++有强大的免费的几何库、线性代数库、数值分析库、控件库、界面库,Internet访问类,数据库操作类,图形库,那么用C++开发程序还不是跟搭积木一样么?
造成这种现状的原因,可能就是因为大多数商业程序都是用C++开发,大家都不肯把自己的好东西拿出来共享。另一个原因是Java和C#背后都有一个公司在支持,而C++却是真正没有娘家的女人。我们作为C++的男人,不疼C++这样的好女人就没有天理了。
[解决办法]
毕竟不是所有的程序员都像楼主那么细心。

封装是个好习惯啊。

热点排行