MST
星途 面试题库

面试题:C++中delete []操作的基础使用场景

请简述在C++中,什么情况下应该使用delete [] 操作符来释放内存?并给出一个简单的代码示例,展示如何使用new []分配数组内存,以及如何使用delete [] 正确释放该内存。
33.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

回答

  1. 使用 delete [] 的情况
    • 当使用 new [] 为一个数组分配内存时,应该使用 delete [] 来释放该内存。这是因为 new [] 不仅分配了足够存储数组元素的内存,还可能在内部记录了数组的大小等信息(不同编译器实现可能不同),delete [] 操作符知道如何正确地释放这些由 new [] 分配的内存并调用数组中每个对象的析构函数(如果数组元素是对象类型)。如果使用 delete 而不是 delete [] 来释放由 new [] 分配的内存,会导致内存泄漏和未定义行为,因为对象的析构函数可能不会被正确调用。
  2. 代码示例
#include <iostream>

int main() {
    // 使用 new [] 分配数组内存
    int* intArray = new int[5];
    for (int i = 0; i < 5; i++) {
        intArray[i] = i;
    }

    // 使用 delete [] 释放内存
    delete [] intArray;

    // 以下代码展示对象数组的情况
    class MyClass {
    public:
        MyClass() { std::cout << "MyClass constructor" << std::endl; }
        ~MyClass() { std::cout << "MyClass destructor" << std::endl; }
    };

    MyClass* myClassArray = new MyClass[3];
    // 使用完后释放内存
    delete [] myClassArray;

    return 0;
}

在上述代码中,首先为 int 类型的数组分配内存并初始化,然后使用 delete [] 释放。接着展示了自定义类 MyClass 的数组分配和释放,通过观察构造函数和析构函数的输出可以验证 delete [] 正确调用了每个对象的析构函数。