MST

星途 面试题库

面试题:C++中复杂数据结构下delete与delete []的正确使用

假设有一个自定义类`MyClass`,内部包含指针成员指向动态分配的数组,同时有一个`MyClass`类型的动态数组。请写出对单个`MyClass`对象以及`MyClass`数组正确使用delete和delete []进行内存释放的代码,并解释原因。
38.8万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

假设MyClass类定义如下:

class MyClass {
private:
    int* data;
public:
    MyClass(int size) {
        data = new int[size];
    }
    ~MyClass() {
        delete[] data;
    }
};
  1. 释放单个MyClass对象
MyClass* obj = new MyClass(5);
// 使用obj
delete obj;

原因delete obj用于释放通过new分配的单个MyClass对象。当delete一个对象时,会自动调用该对象的析构函数,在MyClass的析构函数中,已经正确释放了data数组的内存,所以这里直接使用delete释放MyClass对象本身即可。

  1. 释放MyClass类型的动态数组
MyClass* arr = new MyClass[3];
// 使用arr
delete[] arr;

原因delete[] arr用于释放通过new[]分配的MyClass对象数组。当使用delete[]时,会按顺序调用数组中每个对象的析构函数,从而正确释放每个对象内部动态分配的内存(如data数组)。如果使用delete而不是delete[]来释放数组,只会调用数组第一个元素的析构函数,其他元素的析构函数不会被调用,导致内存泄漏。