g++ 警告删除一个代码的数组,但不删除另一个代码

g++ gives warning for deleting an array for one code but not the other

我有 Java 背景,对指针和其他东西的工作原理仍然感到困惑。我有 2 个例子。

int arr[10] = {};
delete[] arr;

在这里,我的编译器抛出了关于删除 arr.

的警告
int *arr = new int[4];
delete[] arr;

但它不会在这里发出警告?这是为什么?

在您的第一个代码中,arr 是静态分配的(在堆栈上),超出范围时会自动释放。对静态分配的变量调用 delete[] 毫无意义。

在您的第二个代码中,arr 是在堆上动态分配的,并且 不会 在超出范围时自动释放,因此需要调用 delete[]就可以了。

在此处获取有关 delete 正确用法的更多信息:C++ and when to use delete