在一个功能中。我创建了一个本地数组。 char arr[20];
在此功能结束之前。编译器会为我做垃圾收集吗?还是我需要delete
自己做?
问问题
7887 次
5 回答
34
C++ 中没有垃圾收集。
但是,如果您使用自动变量,它们会在超出范围时被销毁。
作为一项规则,每个 应该有 1 个delete
调用new
。如果你没有new
,你就没有delete
。
于 2012-05-10T18:06:34.167 回答
9
您不必删除此数组,因为您在堆栈上创建了它。如果您使用 new 创建了数组,则必须使用 delete 进行清理。
于 2012-05-10T18:05:49.860 回答
2
局部变量在创建它们的块(不一定是函数)的末尾被销毁。例如:
void myfunc() {
int x[some_size];
if (something) {
std::vector<std::string> y;
// ...
} // y will be destroyed here
// more code
} // x will be destroyed here
如果您希望您的数组在函数退出之前被销毁,您可能需要使用相同的:
void f() {
// come code here
{
int x[size];
// code that uses x
} // `x` gets destroyed here
// more code
}
但是,我应该补充一点,此时销毁变量可能不会影响内存使用。退出内部块后不需要内存,但也可能不会立即释放。
另一方面,如果您使用类似的东西std::vector
而不是显式动态分配,则销毁对象将(立即)释放用于存储对象数据的内存。
于 2012-05-10T18:25:17.843 回答
1
任何局部变量(包括数组)都是在堆栈上创建的,因此在函数返回时会被回收。
你可以认为这类似于垃圾回收,但细节却大不相同。如果你做更多的任何类型的编程,你应该更多地了解其他语言(在大多数语言中都是相似的)。
所以不,您不需要对本地阵列做任何事情。
于 2012-05-10T18:07:50.490 回答
0
变量只存在于定义它们的函数中。一旦该函数终止,它们就消失了。如果您使用or type 命令手动分配内存,则只需要delete
/您的变量。free
new
malloc
于 2012-05-10T18:07:23.547 回答