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在释放内存前会调用类的析构函数