C++ 和 C 语言中new/delete与malloc/free的区别

new/deletemalloc/free 是 C++ 和 C 语言中用于动态内存分配的两组不同的函数,它们之间存在一些关键的区别:

  1. 语言层面

    • mallocfree 是 C 语言标准库中的函数,也可以在 C++ 中使用。
    • newdelete 是 C++ 语言中引入的操作符,专门用于对象的内存分配和释放。
  2. 构造和析构

    • malloc 只负责分配内存,不调用对象的构造函数。free 也只是释放内存,不调用析构函数。
    • new 在分配内存的同时会调用对象的构造函数,初始化对象。delete 在释放内存前会调用对象的析构函数,进行清理工作。
  3. 类型安全

    • malloc 返回一个 void* 类型的指针,需要手动转换为正确的类型,这可能会导致类型安全问题。
    • new 直接返回正确类型的指针,提高了类型安全性。
  4. 错误处理

    • malloc 在无法分配内存时返回 NULL
    • new 在默认情况下会抛出一个 std::bad_alloc 异常,除非使用了 nothrow 版本,例如 new (nothrow) T
  5. 内存对齐

    • new 通常确保内存对齐满足对象类型的要求。
    • malloc 分配的内存对齐通常是较为基本的,可能需要手动处理对于复杂类型的对齐要求。
  6. 重载

    • newdelete 可以被重载,允许自定义它们的行为。
    • mallocfree 不能被重载。

因此,在 C++ 中,推荐使用 newdelete 来分配和释放对象的内存,以利用它们提供的构造、析构和类型安全等特性。如果只是简单地分配一段内存而不涉及对象构造,mallocfree 仍然可以使用,但这种情况比较少见。

相关推荐
茉莉玫瑰花茶10 分钟前
Qt 信号与槽 [ 1 ]
开发语言·数据库·qt
汉克老师32 分钟前
GESP5级C++考试语法知识(贪心算法(一)课堂例题精讲)
c++·贪心算法·gesp5级·gesp五级·贪心规律
墨染千千秋42 分钟前
C++头文件的使用,和各个头文件与头文件用处
c++
呱呱巨基43 分钟前
Linux 基础IO
linux·c++·笔记·学习
旖-旎1 小时前
深搜练习(N皇后)(10)
c++·算法·深度优先·力扣
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题】【Java基础篇】第30题:JDK动态代理和CGLIB动态代理有什么区别
java·开发语言·后端·面试·代理模式
张健11564096481 小时前
临界区和同一线程上锁
java·开发语言·jvm
头发够用的程序员2 小时前
C++和Python面试经典算法汇总(一)
开发语言·c++·python·算法·容器·面试
夜猫逐梦2 小时前
【逆向经验】一篇文章讲透为什么CE搜不到Python游戏的内存值
开发语言·python·游戏
水龙吟啸2 小时前
数据结构与算法随机复习–Day1
数据结构·c++·算法