在C++中,malloc
和 new
都用于分配内存,但它们有一些关键的区别。通常情况下,推荐使用 new
,但在一些特殊情况下,可以考虑使用 malloc
。
malloc
和 free
malloc
是C语言中的内存分配函数,不会调用构造函数和析构函数。
#include <cstdlib>
int main() {
int* arr = (int*)malloc(5 * sizeof(int)); // 分配5个整数的内存
// 使用内存
free(arr); // 释放内存
return 0;
}
new
和 delete
new
是C++中的内存分配运算符,会调用构造函数进行对象的初始化;delete
用于释放由 new
分配的内存,并调用析构函数。
class MyClass {
public:
MyClass() {
// 构造函数
}
~MyClass() {
// 析构函数
}
};
int main() {
MyClass* obj = new MyClass(); // 创建对象并调用构造函数
// 使用对象
delete obj; // 调用析构函数并释放内存
return 0;
}
malloc
和 new
使用 malloc
:在C++中,一般不推荐使用 malloc
,除非你在C和C++混编的情况下,或者在某些需要低层次的内存控制的场景。
使用 new
:大多数情况下,应该使用 new
来分配内存,因为它会调用构造函数,确保对象的正确初始化,并且在释放内存时会调用析构函数。
对于动态分配对象,推荐使用 new
,而对于数组等较低级别的内存操作,可以使用 malloc
。然而,在现代C++中,使用智能指针和标准库容器是更安全、方便的选择。