跳到主要内容

new、delete、malloc、free之间的关系 ?

参考答案:

newdeletemallocfree 都是在 C++ 中用于动态内存分配和释放的函数,但它们在使用和功能上有所区别。

  1. new 和 delete

    • newdelete 是 C++ 提供的操作符,用于动态分配和释放对象。
    • new 不仅分配内存,还会调用对象的构造函数来初始化该对象。
    • delete 不仅会释放内存,还会调用对象的析构函数来清理对象。
    • newdelete 是类型安全的,即编译器会检查类型匹配,以防止错误地释放不同类型的内存。
  2. malloc 和 free

    • mallocfree 是 C 语言提供的函数,用于动态分配和释放内存。
    • malloc 只负责分配内存,不会初始化内存。
    • free 只负责释放内存,不会调用任何函数。
    • mallocfree 不是类型安全的,需要程序员自行处理类型转换和类型匹配。

在 C++ 中,建议使用 newdelete,因为它们提供了更好的类型安全性和对象初始化/清理机制。但在某些情况下,例如与 C 代码交互或某些底层编程场景中,可能会使用 mallocfree

注意:在 C++ 中,使用 malloc 分配的内存必须使用 free 释放,同样,使用 new 分配的内存必须使用 delete 释放。混合使用这些函数可能会导致未定义的行为。