在 cpp 中,我是否必须始终"free"原始变量?

In cpp, do I have to always "free" the primitive variables?

本文关键字:free 原始 变量 cpp 是否      更新时间:2023-10-16

如果我有一个声明intfunction,在这个function的末尾,我需要"释放"int以节省内存?

的例子:

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

以下是您的内存管理戒律

  • 你应该释放只释放malloc'ed callloed
  • 你应该只删除你已经新增的
  • 删除[]只你新[]的ed
  • 应尽可能使用RAII

No。它是一个自动变量,这意味着当它超出作用域时,它将被释放。

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

正如大家所提到的,不,您不需要特别释放内存,因为变量在函数结束时超出了作用域。

然而,在一个稍微不同的注释中,我在寻找一种快速而干净地释放原始变量内存的方法时偶然发现了这个页面,后来发现了一种令人难以置信的方法来做到这一点,我没有意识到这是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
}

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

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

x是一个堆栈变量,当doSomething()返回时将被自动删除。

只有那些用malloc()手工分配的对象必须是free() d(在c++中很少见)。另外,不要在c++中使用free()malloc(),而是使用newdelete

不,只有在使用new动态分配内存时才需要释放内存。在本例中,该变量位于堆栈中,并在函数结束时销毁。

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