面试题答案
一键面试回答
- 使用
delete []
的情况:- 当使用
new []
为一个数组分配内存时,应该使用delete []
来释放该内存。这是因为new []
不仅分配了足够存储数组元素的内存,还可能在内部记录了数组的大小等信息(不同编译器实现可能不同),delete []
操作符知道如何正确地释放这些由new []
分配的内存并调用数组中每个对象的析构函数(如果数组元素是对象类型)。如果使用delete
而不是delete []
来释放由new []
分配的内存,会导致内存泄漏和未定义行为,因为对象的析构函数可能不会被正确调用。
- 当使用
- 代码示例:
#include <iostream>
int main() {
// 使用 new [] 分配数组内存
int* intArray = new int[5];
for (int i = 0; i < 5; i++) {
intArray[i] = i;
}
// 使用 delete [] 释放内存
delete [] intArray;
// 以下代码展示对象数组的情况
class MyClass {
public:
MyClass() { std::cout << "MyClass constructor" << std::endl; }
~MyClass() { std::cout << "MyClass destructor" << std::endl; }
};
MyClass* myClassArray = new MyClass[3];
// 使用完后释放内存
delete [] myClassArray;
return 0;
}
在上述代码中,首先为 int
类型的数组分配内存并初始化,然后使用 delete []
释放。接着展示了自定义类 MyClass
的数组分配和释放,通过观察构造函数和析构函数的输出可以验证 delete []
正确调用了每个对象的析构函数。