面试题答案
一键面试- 常见误用场景
- 场景一:对单个对象使用
delete []
- 例如:
- 场景一:对单个对象使用
int* singleInt = new int(5);
delete [] singleInt;
- 在这段代码中,`singleInt`是通过`new int`创建的单个`int`对象,应该使用`delete singleInt;`来释放内存。然而却错误地使用了`delete []`。
- 场景二:对数组对象使用
delete
- 例如:
int* intArray = new int[10];
delete intArray;
- 这里`intArray`是通过`new int[10]`创建的包含10个`int`的数组,正确的释放方式是`delete [] intArray;`,但错误地使用了`delete`。
2. 误用后果
- 对单个对象使用
delete []
- 后果可能是程序行为未定义。
delete []
操作符会试图按照数组的方式来释放内存,它可能会尝试调用数组中每个元素的析构函数(即使这里只有一个对象),这可能导致额外的、不必要的析构函数调用,并且可能会以错误的方式处理内存,最终可能导致程序崩溃或产生其他难以调试的错误。
- 后果可能是程序行为未定义。
- 对数组对象使用
delete
- 这同样会导致程序行为未定义。
delete
操作符只会调用数组首元素的析构函数(如果对象类型有析构函数),而不会调用数组中其他元素的析构函数,这会导致内存泄漏,因为数组中除首元素外的其他对象占用的内存没有被正确释放,同时可能也会导致堆内存管理混乱,引发程序崩溃或其他异常行为。
- 这同样会导致程序行为未定义。