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

问题描述 投票:0回答:1

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

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

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

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

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

c++ arrays delete-operator
1个回答
3
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.