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