new/delete 与 malloc/free 的区别

 在 C++ 中,申请动态内存与释放动态内存,用 new / delete 与 malloc / free 都可以,而且它们的存储方式都相同,new / malloc 动态申请的内存都位于堆中,无法被操作系统自动回收,需要对应的 delete / free 来释放空间,同时对于一般的数据类型,如 int、char型,它们的效果都是一样的。
      malloc / free 是 C / C++ 语言的标准库函数,在 C 语言中需要头文件 <stdlib.h> 的支持, new / delete 是 C++ 的运算符。对与类的对象而言,malloc / free 无法满足动态对象的要求,对象在创建的同时要自动执行构造函数,对象消亡之前要自动执行析构函数。
         主要区别:
  1. new 能够自动计算需要分配的内存空间,而 malloc 需要手工计算字节数。
  2. new 与 delete 直接带具体类型的指针,而 malloc 与 free 返回 void 类型的指针。
  3. new 是类型安全的,而 malloc 不是。
  4. new 一般分为两步,分别是 new 操作和构造。new 操作对应于 malloc,但 new 操作可以重载,可以自定义内存分配策略,不做内存分配,甚至分配到非内存设备,而 malloc 不行。
  5. new 将调用构造函数,而 malloc 不能,delete 将调用析构函数,而 free 不能。

  1. malloc / free 需要库文件 stdlib.h 支持,而 new / delete 则不需要库文件支持。

参考文献:《程序员面试笔试宝典》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值