new / delete 和 malloc / free 的异同
new / delete 和 malloc / free 的异同
栈区和堆区
- 栈:在函数内部声明的所有变量都将占用栈内存。
- 堆:这是程序中未使用的内存,在程序运行时可用于动态分配内存。
相同之处
new / delete 和 malloc / free 都用于堆区内存的管理
不同之处
new / delete 是操作符,malloc / free 是库函数。
申请内存的过程:
- new不需要指定内存大小,而malloc需要
- new在申请内存后会调用类的构造函数
- new申请动态内存失败时,会抛出bac_alloc异常
- new申请动态内存成功时返回的是对象类型的指针,无须进行类型转换;malloc申请动态内存成功时返回void * ,需要通过强制类型转换。
- 释放内存的过程:
- 调用free之前需要检查需要释放的指针是否为空,使用delete 释放内存则不需要检查指针是否为NULL
- delete在释放内存前会调用类的析构函数
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 xRosemary的个人博客!