我是否需要在C ++中显式删除数组以保护内存?

时间:2012-05-10 18:04:39

标签: c++ garbage-collection

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

谢谢。

5 个答案:

答案 0 :(得分:27)

C ++中没有垃圾收集。

但是,如果使用自动变量,它们将在超出范围时被销毁。

通常,deletenew次调用{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)

变量只存在于它们定义的函数中。一旦该函数终止,它们就会消失。如果您使用deletefree类型命令手动分配内存,则只需要new / malloc个变量。