在一个功能中。我创建了一个本地数组。 char arr[20];
并且在此功能结束之前。
编译器会为我做垃圾收集吗?或者我需要自己做delete
?
谢谢。
答案 0 :(得分:27)
C ++中没有垃圾收集。
但是,如果使用自动变量,它们将在超出范围时被销毁。
通常,delete
每new
次调用{1}}。如果您没有new
,则不会delete
。
答案 1 :(得分:5)
您不必删除此数组,因为您在堆栈上创建它。 如果您使用new创建了数组,则必须使用delete来清理。
答案 2 :(得分: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
的内容而不是显式动态分配,则销毁对象将(立即)释放用于存储对象数据的内存
答案 3 :(得分:1)
在堆栈上创建任何局部变量(包括数组),因此在函数返回时回收。
你可以认为这类似于垃圾收集,但细节是非常不同的。如果你做更多任何类型的编程,你应该学习更多关于其他语言的知识(在大多数语言中都是类似的)。
所以不,你不需要对本地数组做任何事情。
答案 4 :(得分:-1)
变量只存在于它们定义的函数中。一旦该函数终止,它们就会消失。如果您使用delete
或free
类型命令手动分配内存,则只需要new
/ malloc
个变量。