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