9

我正在写一些这样的代码:

while(true) {
    int array[5];
    // do something
}

对于循环的每一轮,数组都是一个新数组。我需要在循环结束时删除数组吗?

4

4 回答 4

16

我需要在循环结束时删除数组吗?

,您不需要删除它,因为它array具有自动存储期限。当退出每个while循环时,它将被释放。

您需要调用delete [] / new [], 并delete / new成对调用。

于 2013-02-15T05:26:08.137 回答
1

不。

在堆栈上声明的变量不需要手动释放。while您的数组在循环范围内。对于循环的每次迭代,数组在堆栈上分配,然后自动释放。

只有用声明的数组new[]必须手动释放delete[]

此外,您声明的数组没有static任何意义。该static关键字在 C 中具有特定含义。您声明的数组实际上存储为auto(自动存储)变量,这意味着它在超出范围时会自动释放。

于 2013-02-15T05:24:29.303 回答
1

其他答案已正确解释 adelete是不必要的,因为您的数组在堆栈上,但他们没有解释堆栈是什么。这里有一个非常好的解释:堆栈和堆是什么以及在哪里?

因为它适用于您的问题:在 C 和 C++ 中,除非您明确告诉编译器,否则您的变量将放置在堆栈中,这意味着它们仅存在于声明它们的范围(即块)内。显式告诉编译器将某些东西放在堆上的方法是使用malloc(C 方式)或new(C++ 方式)。只有这样你才需要调用free(在 C 中)或delete/ delete[](C++)。

于 2013-02-15T05:31:31.767 回答
0

您不能(除非您使用一些复杂的程序集)并且不需要删除分配在堆栈上的数组或对象。

如果由于某种原因您觉得需要删除创建的数组,则:

int *array = new int[5];
//do something
delete[] array;

另外,我的建议是使用std::vector而不是数组。

于 2013-02-15T05:26:58.047 回答