C++中的new VS C语言中的malloc

前几天一个朋友去面试百度空间的一个职位,被问及这个问题,我听后说了几点,不过感觉还是不透彻,所以上网查阅了一些资料,自己又想了想,总结一下。

  • 动作不同:
    • 在C++中,new一个对象时,程序完成对象的空间的分配的同时,构造函数也被调用,类似,delete一个对象时,对象的空间被释放的同时析构函数也被调用。
    • 在C中,malloc和free 则没有构造函数和析构函数被调用这个动作。当然,在没有特定的构造函数或析构函数时,C++也没有这个动作。
  • 关于重载:
    • 在C++中,对于任何非数组的空间分配,我们可以通过定义函数名相同但参数不同的构造函数完成对构造函数的重载,而对于数组的空间分配,就只能使用默认构造函数了,若你试图去开辟一个没有默认构造函数的数组,Compiler会出错。
    • 在C中,自然是没有重载这个事情了。
  • 返回值不同:
    • 在C中,malloc返回一个void *指针,需要你强制指针类型转换
    • 在C++中,你直接new一个就好。
      • 注意,对于基本类型,这个差别是二者唯一的差别,当然不建议在C++中使用malloc+强制类型转换创建基本数据类型或者对象。
  • 定义不同:
    • new是操作符
    • malloc是函数
  • 异常处理方式不同:
    • new抛出异常
    • malloc返回NULL
  • 分配空间单位不同:
    • new分配单位为对象所占用空间的倍数。
    • malloc为字节

使用提示:

1.delete使用不当会造成内存泄露,下边的这个例子就是只有第一个t被释放掉:

Test* t = new Test[3]; 
delete t;

而下列代码会导致堆崩溃或数据丢失。

Test* t = new Test; 
delete[] t; // <-- This is even worse

2.realloc只能用于malloc。C++中你只能重新开辟空间、复制、释放原来空间来完成相同的操作。

3.性能区别,根据http://code.dawnofthegeeks.com/2009/05/04/fyi-new-vs-malloc/ 其中提到malloc/free慢于new/delete,但是在后来笔者开发的一个程序中却出现了不同的场景。

 

From:http://blog.csdn.net/gnuhpc/archive/2010/07/08/5720045.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值