c++中new和malloc 分配内存有什么不同
在 C++ 中,new
和malloc
都用于动态分配内存,但它们在底层机制、语法和适用场景上存在显著差异,理解这些差异对写出安全高效的代码至关重要。以下是两者的核心区别:
1. 类型安全性
-
new
:- 自动推导类型:无需显式指定类型,返回的指针类型与对象类型严格匹配。
cpp
int* ptr = new int(42); // 直接分配int类型,无需转换
- 编译时检查:若类型不匹配会报错,避免潜在的类型错误。
-
malloc
:- 返回
void*
:需手动转换为目标类型,否则会触发警告(C++ 中)。
cpp
int* ptr = (int*)malloc(sizeof(int)); // 必须显式转换类型
- 返回