简述new 和 malloc 的区别 ?
参考答案:
new
和 malloc
都是用于在 C++ 中动态分配内存的方法,但它们之间存在一些重要的区别。这些区别包括它们的行为、安全性和易用性。
- 行为:
malloc
是 C 语言库函数,它只负责分配内存,并不会调用构造函数。因此,如果你正在分配的对象有构造函数,那么你需要手动调用它。另一方面,new
是 C++ 关键字,它首先调用malloc
来分配内存,然后调用对象的构造函数。同样地,当使用delete
释放内存时,对象的析构函数也会被调用。 - 安全性:
malloc
分配的内存并不会被初始化为任何特定的值,因此可能会包含垃圾数据。如果你尝试访问未初始化的内存,可能会导致未定义的行为。相反,new
分配的内存会被初始化为零,这可以提高安全性。 - 类型安全:
malloc
返回的是void*
类型,你需要手动进行类型转换。这可能会导致类型错误。new
则返回正确的类型,无需进行额外的类型转换。 - 错误处理:如果
malloc
无法分配所需的内存,它会返回NULL
。你需要检查返回值,以确定是否成功分配了内存。相比之下,new
在无法分配内存时会抛出一个bad_alloc
异常,这使得错误处理更加直观。 - 易用性:
new
和delete
是一对操作符,可以方便地进行内存的申请和释放。而malloc
和free
是一对函数,使用起来相对繁琐。
因此,尽管 malloc
和 new
都可以用于动态内存分配,但在 C++ 中,new
通常被认为是更好的选择,因为它提供了更高的类型安全性和易用性。然而,在某些情况下,如编写底层代码或需要更多控制内存分配时,可能会选择使用 malloc
。