3

如果我有一个function声明一个的int,最后function我需要“释放”它int以节省内存?

例子:

void doSomething() {
    int x = 0;
    // do something with x
    free(x); // needed?
}
4

7 回答 7

14

这是给你的内存管理诫命

  • 你只能释放你已经malloc'edcalloc'ed的东西
  • 你应该只删除更新的内容
  • 你应该只删除[]你有新的[]'ed
  • 尽可能使用RAII
于 2013-03-21T13:57:07.207 回答
5

不,它是一个自动变量,这意味着它会在超出范围时被释放。

此外,您很少free()在 C++ 中使用,它是一个 C 函数。

于 2013-03-21T13:54:10.803 回答
3

正如其他人所提到的,不,您不需要专门释放内存,因为变量在函数末尾超出范围。

然而,稍微不同的是,我在寻找一种快速、干净地释放原始变量内存的方法时遇到了这个页面,后来发现了一种令人难以置信的方法来做到这一点,我没有意识到这是 C++ 的一部分。对于其他也在寻找这个答案的人,这里就是。

实际上,您可以只使用额外的大括号集来设置 C++ 中变量的特定范围,因此在没有函数结尾的情况下释放此函数中“x”内存的一种方法就是将“x”的范围用大括号像这样:

void doSomething() {
    // do something in the start of the function
    {

        int x = 0;
        // do something with x

    } // x is destroyed here

    // do something that doesn't require x
}
于 2021-10-08T07:32:07.370 回答
1

否。int对象具有自动存储期限。它在其作用域结束时被销毁,即函数结束时。

无论如何,您不应该free在 C++ 中使用。它仅在您用于malloc分配内存时使用,但malloc在 C++ 中不常用。相反,您应该使用new动态分配对象。当您创建了一个具有动态存储持续时间的对象时new,使用delete来销毁它。

于 2013-03-21T13:54:11.780 回答
1

x是一个堆栈变量,返回时会自动删除doSomething()

只有那些手动分配的对象malloc()必须是free()d (在 C++ 中非常少见)。也不要在 C++ 中使用 and - 使用free()and代替。malloc()newdelete

于 2013-03-21T13:54:19.233 回答
1

不,如果您使用动态分配内存,您只需要释放内存new。在这种情况下,此变量在堆栈中,并在函数结束时被销毁。

于 2013-03-21T13:54:44.850 回答
0

您只需要释放已在代码中为其分配内存的变量。在您的示例x中是在本地声明的,并且程序在堆栈上为其分配内存。在函数结束时,变量被自动销毁。所以你不必担心它。

于 2013-03-21T13:55:03.463 回答