单片机/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 语言特性)。

相关推荐
wjs2024几秒前
RSS Item 元素:深入解析与使用指南
开发语言
小郑加油3 分钟前
python学习Day11:认识与创建CSV文件
开发语言·python·学习
念何架构之路26 分钟前
Go Web基础和Http演进
开发语言·后端·golang
初心未改HD32 分钟前
Go语言database/sql与SQLx:构建健壮的数据访问层
开发语言·golang
晚风吹红霞34 分钟前
C++异常处理核心知识点全解析
开发语言·c++
CoderCodingNo35 分钟前
【信奥业余科普】C++ 的奇妙之旅 | 17:面的铺展与文本的本质——二维数组与字符串
开发语言·c++
J2虾虾36 分钟前
Java Lambda 表达式详解文档
java·开发语言
csbysj202040 分钟前
CSS 网格元素
开发语言
lly20240640 分钟前
DOM 元素:深入理解与高效运用
开发语言
鸟儿不吃草42 分钟前
安卓实现左右布局聊天界面
android·开发语言·python