在C++中,new
和 malloc
都用于动态内存分配,但它们之间有一些重要的区别。以下是对它们的详细描述,包括方法、步骤和相应的示例源代码。
new
和 malloc
的区别:new
: 是C++的运算符,能够调用对象的构造函数,返回类型明确。
malloc
: 是C语言的库函数,只分配内存块,返回void*
,不会调用对象的构造函数。
new
: 知道所分配的类型,可直接使用。
malloc
: 返回void*
,需要手动进行类型转换。
new
: 分配对象时会调用构造函数。
malloc
: 不调用任何构造函数。
new
:#include <iostream>
class MyClass {
public:
MyClass() {
std::cout << "Constructor called." << std::endl;
}
};
int main() {
MyClass* obj = new MyClass(); // 使用 new 调用构造函数
delete obj; // 使用 delete 释放内存
return 0;
}
malloc
:#include <iostream>
class MyClass {
public:
MyClass() {
std::cout << "Constructor NOT called." << std::endl;
}
};
int main() {
MyClass* obj = (MyClass*)malloc(sizeof(MyClass)); // malloc 不调用构造函数
free(obj); // 使用 free 释放内存
return 0;
}
这两个示例清晰地展示了 new
和 malloc
在构造函数调用、类型信息等方面的区别。