面试题答案
一键面试- 问题现象:
- 使用
delete objArray;
而不是delete[] objArray;
会导致内存泄漏。
- 使用
- 原理说明:
- 当执行
MyClass* objArray = new MyClass[3];
时,系统为objArray
分配了足够存储3
个MyClass
对象的内存空间。同时,每个MyClass
对象在构造函数中又为data
成员变量动态分配了内存(data = new int[5];
)。 - 正确的释放方式是
delete[] objArray;
,这样会依次调用objArray
中每个MyClass
对象的析构函数。在析构函数中,delete[] data;
会释放每个MyClass
对象中data
成员变量所指向的动态分配的内存。 - 然而,如果使用
delete objArray;
,只会调用objArray
指向的第一个MyClass
对象的析构函数,释放第一个MyClass
对象中data
所指向的内存。而剩下的两个MyClass
对象中的data
所指向的内存没有被释放,从而导致内存泄漏。因为这两个MyClass
对象没有调用析构函数,它们的data
成员变量指向的动态分配的内存就无法被回收,一直占用系统内存。
- 当执行