g++对删除一个数组的代码而不删除另一个数组的代码发出警告。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了g++对删除一个数组的代码而不删除另一个数组的代码发出警告。相关的知识,希望对你有一定的参考价值。

对不起,如果这是一个愚蠢的问题,我是java背景的,但对指针之类的东西如何工作还是很困惑。我有两个例子。

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

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

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

但这里没有抛出警告?为什么会这样?

答案

在你的第一段代码中。arr 是静态分配的(在堆栈上),当超出作用域时将自动释放。调用 delete[] 在静态分配的变量上是没有意义的。

在你的第二段代码中。arr 是在堆上动态分配的,并且会在 会自动被释放,因此需要调用 delete[] 上。

在这里获取更多关于删除的正确用法的信息。C++和何时使用delete

以上是关于g++对删除一个数组的代码而不删除另一个数组的代码发出警告。的主要内容,如果未能解决你的问题,请参考以下文章

使用此特定代码从另一个数组中删除一个数组[重复]

删除指针数组而不删除内存中的指向对象?

如何从 React 状态数组中删除组件而不删除数组的其余部分?

对数组 C++ 使用删除关键字

从嵌套对象中删除数据而不改变

获取数组的最后一个元素而不删除它的最佳方法是啥?