设为首页 加入收藏

TOP

建议21:尽量用new/delete代替malloc/free(2)
2013-10-07 14:47:12 来源: 作者: 【 】 浏览:59
Tags:建议 尽量 new/delete 代替 malloc/free

建议21:尽量用new/delete代替malloc/free(2)

new失败时会调用new_handler处理函数,而malloc失败则直接返回NULL。

free与delete之间的区别则只有以下两点:

delete是C++(www.cppentry.com)运算符,free是C标准库函数。

delete可以自动调用对象的析构函数,而malloc不会。

针对内置类型而言,因为没有对象的构造与析构,所以malloc/free除了需要强制转型之外,和new/delete所做的工作无异,用哪一个只是涉及个人喜好而已。

  1. //declaring native type  
  2. int* i1 = new int;  
  3. delete i1;  
  4.  
  5. int* i2 = (int*) malloc(sizeof(int));  
  6. free(i2);  
  7.  
  8. //declaring native type array  
  9. char* c1 = new char[10];  
  10. delete[] c1;  
  11.  
  12. char* c2 = (char*) malloc(sizeof(char)*10);  
  13. free(c2); 

既然提到了malloc/free,不能不提一下realloc。使用realloc函数可以重新设置内存块的大小,而在C++(www.cppentry.com)中没有类似于realloc这样的替代品。如果出现上述需求,所做的就是,释放原来的内存,再重新申请。

既然new/delete的功能不仅赶上而且超越了malloc/free,那为什么C++(www.cppentry.com)标准中没有把malloc/free淘汰出局呢?这是因为C++(www.cppentry.com)要遵守“对C兼容”的承诺,要让一些有价值的包含malloc/free函数库的C程序在C++(www.cppentry.com)中得到重用。所以,在C++(www.cppentry.com)中,new/delete和malloc/free一直并存着。

不过,将malloc/free和new/delete混合使用绝对不是什么好主意。Remember that, to new is C++(www.cppentry.com); to malloc is C; and to mix them is sin. 如果用free来释放通过new创建的动态对象,或者用delete释放通过malloc申请的动态内存,其结果都是未定义的。换句话说,不能保证它会出现什么问题。如果程序在关键时刻就因为这个在重要客户面前出现问题,那么懊悔恐怕已经来不及了。

请记住:

(1) 不要企图用malloc/free 来完成动态对象的内存管理,应该用new/delete。

(2)请记住:new是C++(www.cppentry.com)的,而malloc是c的。如果混淆了它们,那将是件蠢事。所以new/delete必须配对使用,malloc/free也一样。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇建议19:明白在C++中如何使用C 下一篇从命令行访问 Twitter

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: