对不起,如果这是一个愚蠢的问题,我是java背景的,但对指针之类的东西如何工作还是很困惑。我有两个例子。
int arr[10] = {};
delete[] arr;
这里,我的编译器抛出了一个关于删除 arr
.
int *arr = new int[4];
delete[] arr;
但这里没有抛出警告?为什么会这样?
在你的第一段代码中。arr
是静态分配的(在堆栈上),当超出作用域时将自动释放。调用 delete[]
在静态分配的变量上是没有意义的。
在你的第二段代码中。arr
是在堆上动态分配的,并且会在 不 会自动被释放,因此需要调用 delete[]
上。
在这里获取更多关于删除的正确用法的信息。C++和何时使用delete