面试题:C++ 中 new 和 malloc 的区别?delete 和 free 的区别?

在 C++ 中,new/delete 和 malloc/free 都用于动态内存管理,但它们有显著的区别:

1. new 和 malloc 的区别

  • 语言
    • new 是 C++ 的运算符。
    • malloc 是 C 标准库函数。
  • 内存分配
    • new 不仅分配内存,还会调用对象的构造函数。
    • malloc 只分配内存,不调用构造函数。
  • 返回类型
    • new 返回特定类型的指针。
    • malloc 返回 void*,需要显式类型转换。
  • 内存大小
    • new 自动计算所需内存大小。
    • malloc 需要手动指定内存大小。
  • 失败处理
    • new 在失败时抛出 std::bad_alloc 异常。
    • malloc 在失败时返回 NULL
  • 重载
    • new 可以重载。
    • malloc 不能重载。

2. delete 和 free 的区别

  • 语言
    • delete 是 C++ 的运算符。
    • free 是 C 标准库函数。
  • 内存释放
    • delete 不仅释放内存,还会调用对象的析构函数。
    • free 只释放内存,不调用析构函数。
  • 指针类型
    • delete 用于释放由 new 分配的指针。
    • free 用于释放由 malloc 分配的指针。
  • 数组处理
    • delete[] 用于释放数组。
    • free 不区分数组和单个对象。

总结

  • new/delete:适用于 C++,自动管理构造和析构,类型安全,支持重载。
  • malloc/free:适用于 C,手动管理内存,不调用构造和析构函数,需要类型转换。

在 C++ 中,推荐使用 new 和 delete,因为它们更安全且符合面向对象的设计。

THE END
点赞10 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容