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

相关推荐
郝学胜_神的一滴几秒前
C++20 高级编程 003:吃透现代基础语法与标准容器
c++
萧瑟余晖1 分钟前
Java深入解析篇三十四之分布式事务
java·开发语言·分布式
CAE虚拟与现实2 分钟前
源码注解 /class 注解 / 运行时注解三者生命周期
java·开发语言
有脚就行4 分钟前
第24篇-Go-gRPC推理服务-高性能跨语言通信
开发语言·人工智能·后端·golang
码匠许师傅5 分钟前
【C++ 面试真题】聊聊 C++ 的关联容器
开发语言·c++·面试
丰锋ff11 分钟前
7.2Qt中Json的操作
开发语言·qt·json
我不是疯子是傻子20 分钟前
用DeepSeek生成Qt多协议解析器?「正则+状态机+AI分支裁剪」混合调优实战
开发语言·qt
新鲜势力呀21 分钟前
深入理解 Elliot CUDA 编程核心:PHP 实现 CUDA 并行计算思想与实践
android·开发语言·php
钡铼技术工坊30 分钟前
N板共享内存集成教程
c语言
ZJU_统一阿萨姆1 小时前
【推理优化进阶】性能实验科学:工作负载、统计显著性与尾延迟归因
开发语言·人工智能·语言模型·系统架构·vllm