11

在一个功能中。我创建了一个本地数组。 char arr[20]; 在此功能结束之前。编译器会为我做垃圾收集吗?还是我需要delete自己做?

4

5 回答 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/您的变量。freenewmalloc

于 2012-05-10T18:07:23.547 回答