MST

星途 面试题库

面试题:C++中delete与delete []在释放自定义类数组时的区别

假设有一个自定义类`class MyClass { public: MyClass() { /* 初始化操作 */ }; ~MyClass() { /* 清理操作 */ }; };`,现在创建了`MyClass* arr = new MyClass[10];`,请说明使用`delete arr;`和`delete [] arr;`分别会有什么情况发生?
31.3万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 使用delete arr;
    • 这是未定义行为。delete arr; 只能用于释放通过 new 单个对象创建的指针,而 arr 是通过 new[] 创建的数组指针。
    • 可能导致内存泄漏,因为只会调用 arr[0] 这个对象的析构函数,其余 9 个对象的析构函数不会被调用,这些对象占用的资源无法正确释放。
  2. 使用delete [] arr;
    • 这是正确释放通过 new[] 创建的数组内存的方式。
    • 会依次调用数组中每个 MyClass 对象的析构函数,完成每个对象的清理操作,然后释放分配的内存,避免内存泄漏。