面试题答案
一键面试- 返回值类型不同:
malloc
函数返回的是void*
类型。例如:void* ptr = malloc(100);
,它只负责分配指定字节数的内存,不关心所分配内存用于存储什么类型的数据。new
运算符返回的是指向所分配对象类型的指针。例如:int* numPtr = new int;
,这里new
返回的是int*
类型指针,明确指向int
类型对象。
- 优先选择场景:
- 优先选择
malloc
的场景:- 当需要分配一段原始的、无类型特定构造和析构操作的内存块时,
malloc
更合适。比如在实现一个简单的内存池机制,用于存储不同类型数据的通用内存块分配。在这种情况下,只需要获取一块指定大小的内存空间,不需要进行对象的构造。
void* buffer = malloc(1024 * 1024); // 分配1MB的内存块用于通用存储 if (buffer) { // 使用buffer进行数据存储等操作 free(buffer); }
- 当需要分配一段原始的、无类型特定构造和析构操作的内存块时,
- 优先选择
new
的场景:- 当分配对象时,尤其是那些具有构造函数和析构函数的对象。例如,创建一个自定义类的对象,
new
会调用对象的构造函数进行初始化。
class MyClass { public: MyClass() { // 构造函数初始化操作 } ~MyClass() { // 析构函数清理操作 } }; MyClass* myObj = new MyClass(); if (myObj) { // 使用myObj delete myObj; }
- 当需要分配数组且数组元素是对象类型时,
new[]
会为每个元素调用构造函数。
MyClass* myObjArray = new MyClass[10]; if (myObjArray) { // 使用数组 delete[] myObjArray; }
- 当分配对象时,尤其是那些具有构造函数和析构函数的对象。例如,创建一个自定义类的对象,
- 优先选择