MST

星途 面试题库

面试题:C++中malloc和new返回值类型差异及应用场景

请阐述C++中malloc和new返回值类型有何不同,并举例说明在何种场景下会优先选择使用基于其返回值类型特性的malloc或new来分配内存。
13.8万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 返回值类型不同
    • malloc函数返回的是void*类型。例如:void* ptr = malloc(100);,它只负责分配指定字节数的内存,不关心所分配内存用于存储什么类型的数据。
    • new运算符返回的是指向所分配对象类型的指针。例如:int* numPtr = new int;,这里new返回的是int*类型指针,明确指向int类型对象。
  2. 优先选择场景
    • 优先选择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;
      }