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

相关推荐
yongui4783421 小时前
C# 与三菱PLC通讯解决方案
开发语言·c#
2501_9333295521 小时前
技术架构深度解析:Infoseek舆情监测系统的全链路设计与GEO时代的技术实践
开发语言·人工智能·分布式·架构
Tong Z21 小时前
常见的限流算法和实现原理
java·开发语言
凭君语未可21 小时前
Java 中的实现类是什么
java·开发语言
wearegogog12321 小时前
离散系统参数辨识与广义预测控制MATLAB实现
开发语言·matlab
史迪仔011221 小时前
[QML] QML IMage图像处理
开发语言·前端·javascript·c++·qt
还在忙碌的吴小二1 天前
Harness 最佳实践:Java Spring Boot 项目落地 OpenSpec + Claude Code
java·开发语言·spring boot·后端·spring
liliangcsdn1 天前
mstsc不在“C:\Windows\System32“下在C:\windows\WinSxS\anmd64xxx“问题分析
开发语言·windows