随笔 - 78  文章 - 1  trackbacks - 0
<2008年10月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜

首先应该知道malloc 和free是匹配的;new和delete是匹配的,他们不可以混淆。    
malloc和new都申请空间,但是new是强类型的分配,会调用对象的构造函数初始化对象,而malloc仅分配内存空间但是不初始化。
new 自适应类型,malloc需要强制转换
new按类型进行分配,malloc需要指定内存大小
对于对象来说free的确释放了对象的内存,但是不调用对象的析构函数。delete不仅释放对象的内存,并且调用对象的析构函数
所以在对象中用free删除new创建的对象,内存就有可能泄露
在delete内部仍调用了free

?

补充一点:
new和malloc虽然都是申请内存,但申请的位置不同,new的内存从free store分配,而malloc的内存从heap分配(详情请看ISO14882的内存管理部分),free store和heap很相似,都是动态内存,但是位置不同,这就是为什么new出来的内存不能通过free来释放的原因。不过微软编译器并没有很好的执行标准,很有可能把free store和heap混淆了,因此,free有时也可以。

再补充一点:
delete时候不需要检查NULL
delete NULL; 是没有任何问题的,所以
if(p)
{
delete p;
p = NULL;
}
还不如
delete p;
p = NULL;
而free(NULL)那就麻烦大了。
posted on 2008-10-30 10:41 Carrie 阅读(244) 评论(1)  编辑 收藏 引用 所属分类: C++

FeedBack:
# re: new delete, free malloc略谈 2008-10-30 23:59 func
free也能接受NULL~  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理