new/delete 与 malloc/free 的区别

来源:互联网 发布:中宏网数据库 编辑:程序博客网 时间:2024/05/08 16:11
 在 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 则不需要库文件支持。

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

1 0
原创粉丝点击