简述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。