G++ 发出警告,要求删除一个代码的数组,但不删除另一个代码的数组

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

本文关键字:删除 代码 数组 一个 另一个 警告 G++      更新时间:2023-10-16

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

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

在这里,我的编译器抛出有关删除arr的警告。

int *arr = new int[4];
delete[] arr;

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

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

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

在此处获取有关正确使用删除的更多信息:C++以及何时使用删除