面试题答案
一键面试- 差异:
malloc
只是分配内存,不会调用对象的构造函数。它是C语言的内存分配函数,在C++ 中仍然可用。其返回值是void*
,需要进行类型转换。new
不仅分配内存,还会调用对象的构造函数来初始化对象。它是C++ 特有的操作符。
- 举例:
#include <iostream>
#include <cstdlib>
class MyClass {
public:
MyClass() {
std::cout << "MyClass constructor called" << std::endl;
}
~MyClass() {
std::cout << "MyClass destructor called" << std::endl;
}
};
int main() {
// 使用malloc分配内存
MyClass* ptr1 = (MyClass*)malloc(sizeof(MyClass));
if (ptr1) {
std::cout << "Memory allocated by malloc" << std::endl;
// 这里没有调用构造函数,ptr1指向的内存中的对象处于未初始化状态
}
free(ptr1);
// 使用new分配内存并调用构造函数
MyClass* ptr2 = new MyClass();
if (ptr2) {
std::cout << "Memory allocated and constructor called by new" << std::endl;
}
delete ptr2;
return 0;
}
在上述代码中,使用 malloc
分配内存后,对象未调用构造函数,而使用 new
分配内存时,对象的构造函数被调用。