在不使用方括号的情况下删除C++数组内存仍然有效吗?
在不使用方括号的情况下删除C++数组内存仍然有效吗?
这个问题已经有答案了:
int* arr = new int[count]; delete arr;
这为什么有效?我已经检查过了,它确实释放了内存。根据我所看到的,我需要使用delete[] arr;
否则它不会释放所有内存。
admin 更改状态以发布 2023年5月21日
现在尝试用每个长度为100个字节的字符串填充数组,看看它是否仍然释放所有分配的内存 ...
它是未定义行为,通常情况下,未定义行为可能会看起来工作。在您的情况下,内存中的对象没有解构函数,因此没有“进一步的工作”,只需释放所有内存[1]。但是,如果您有一个有用的解构函数的对象,它(可能)不会被调用。
如果您使用new T [size];
分配,则应始终使用delete []
。不要混合使用两种方法,这通常是错误的 - 只是有时它会“碰巧”起作用[就像在毫米螺母上使用英寸扳手集的某些尺寸,反之亦然- 但仍然使用在公制螺母上的英寸扳手集是错误的]。
[1]请注意,这可能适用于特定编译器/C ++库组合。使用不同的编译器,使用不同的C ++库或编译为不同的操作系统可能会导致您尝试相同操作时崩溃。