面试题答案
一键面试- 内存管理问题:
- 使用
delete myArr;
时,它只会释放myArr
指向的内存块的第一个元素的内存空间,而myArr
所指向的数组中其余4个MyClass
对象的内存空间不会被释放,这会导致内存泄漏。因为new MyClass[5];
分配了一块连续的内存来存放5个MyClass
对象,delete [] myArr;
才是正确释放整个连续内存块的方式。
- 使用
- 对象生命周期问题:
- 对于析构函数的调用,
delete myArr;
只会调用myArr
指向的第一个MyClass
对象的析构函数。其余4个MyClass
对象不会调用析构函数。这意味着如果MyClass
的析构函数中包含释放资源(如关闭文件、释放动态分配的内存等)的操作,那么其余4个对象相关的资源将不会被正确释放,进一步导致资源泄漏和程序的不稳定。 - 正确使用
delete [] myArr;
会按顺序调用数组中5个MyClass
对象的析构函数,然后释放整个连续的内存块,保证对象生命周期的正确结束和内存的正确回收。
- 对于析构函数的调用,