跳到主要内容

简述new 和 malloc 的区别 ?

参考答案:

newmalloc 都是用于在 C++ 中动态分配内存的方法,但它们之间存在一些重要的区别。这些区别包括它们的行为、安全性和易用性。

  1. 行为malloc 是 C 语言库函数,它只负责分配内存,并不会调用构造函数。因此,如果你正在分配的对象有构造函数,那么你需要手动调用它。另一方面,new 是 C++ 关键字,它首先调用 malloc 来分配内存,然后调用对象的构造函数。同样地,当使用 delete 释放内存时,对象的析构函数也会被调用。
  2. 安全性malloc 分配的内存并不会被初始化为任何特定的值,因此可能会包含垃圾数据。如果你尝试访问未初始化的内存,可能会导致未定义的行为。相反,new 分配的内存会被初始化为零,这可以提高安全性。
  3. 类型安全malloc 返回的是 void* 类型,你需要手动进行类型转换。这可能会导致类型错误。new 则返回正确的类型,无需进行额外的类型转换。
  4. 错误处理:如果 malloc 无法分配所需的内存,它会返回 NULL。你需要检查返回值,以确定是否成功分配了内存。相比之下,new 在无法分配内存时会抛出一个 bad_alloc 异常,这使得错误处理更加直观。
  5. 易用性newdelete 是一对操作符,可以方便地进行内存的申请和释放。而 mallocfree 是一对函数,使用起来相对繁琐。

因此,尽管 mallocnew 都可以用于动态内存分配,但在 C++ 中,new 通常被认为是更好的选择,因为它提供了更高的类型安全性和易用性。然而,在某些情况下,如编写底层代码或需要更多控制内存分配时,可能会选择使用 malloc