单片机/C/C++八股:(十六)C 中 malloc/free 和 C++ 中 new/delete 有什么区别?

上一篇 下一篇
内存对齐、结构体内存对齐

C 中 malloc/free 和 C++ 中 new/delete 有什么区别?

这一版只是初版,因为会涉及到 C++ 中的面向对象编程,比如构造函数、析构函数、类

构造函数:初始化对象,在创建对象时自动调用,用于设置初始状态(如分配资源、赋初值等)。

析构函数:清理对象,在对象销毁前自动调用,用于释放资源(如关闭文件、释放动态内存等)。

1)关键区别总结

最关键区别 :new/delete 管理对象,malloc/free 只管理裸内存。 new/delete 更好。

  1. 语言层级:
    • malloc/free:C 标准库函数,仅分配/释放原始内存。
    • new/delete:C++ 运算符,属于语言内置机制,不仅管理内存,还涉及对象生命周期。
  2. 内存分配:
    • malloc:需要手动计算大小
    • new:自动计算所需空间
  3. 类型安全:
    • malloc:返回 void*,需要强制类型转换
    • new:返回对应类型指针
  4. 构造/析构:
    • malloc:不调用构造函数
    • new:自动调用构造函数和析构函数
  5. 错误处理:
    • malloc:返回 NULL 表示分配失败
    • new:抛出异常 std::bad_alloc
  6. 数组处理:
    • malloc:需要手动计算总大小
    • new:使用 new[] 和 delete[] 处理数组
  7. 兼容性:
    • C++ 允许使用 malloc/free,但不推荐用于对象(会跳过构造/析构,导致资源泄漏或未定义行为)。
    • C 中不能使用 new/delete(非 C 语言特性)。

相关推荐
D e re k ZH4 小时前
C++ 标准库算法全景指南
数据结构·c++·算法
冻柠檬飞冰走茶5 小时前
字母移动游戏题解:贪心求最长可保留连续子串(附 C 实现)
c语言·开发语言·数据结构·算法·动态规划
FRing035 小时前
vue2干货总结7(自定义指令、插槽、单页应用程序、路由的使用(VueRouter))
开发语言·前端·vue.js·vue2
雪落漂泊5 小时前
C++算法 二分查找篇(上)
开发语言·c++·算法
波力海苔夹心脆6756 小时前
C# WPF 资源字典详解:ResourceDictionary、MergedDictionaries 与自定义控件案例
开发语言·c#·wpf·入门教程·resource·资源字典
不会算法的笨小孩6 小时前
异常的使用以及会出现的问题
开发语言·c++·c++11·异常
Hhy_11079 小时前
《C++深度解构06》手撕 string —— 从底层内存管理到深浅拷贝彻底吃透
c语言·开发语言·c++·学习·visual studio
starzy19909 小时前
深入理解Scala函数定义:从方法到函数的类型跨越
开发语言·scala
starzy19909 小时前
深入理解Scala递归函数:从栈溢出到尾调用优化
开发语言·scala
三*一9 小时前
Mapbox‑GL JS 多边形折点编辑工具:实现原理、功能拆解与踩坑总结
开发语言·javascript·ecmascript