如果我有一个function
声明一个的int
,最后function
我需要“释放”它int
以节省内存?
例子:
void doSomething() {
int x = 0;
// do something with x
free(x); // needed?
}
如果我有一个function
声明一个的int
,最后function
我需要“释放”它int
以节省内存?
例子:
void doSomething() {
int x = 0;
// do something with x
free(x); // needed?
}
这是给你的内存管理诫命
不,它是一个自动变量,这意味着它会在超出范围时被释放。
此外,您很少free()
在 C++ 中使用,它是一个 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
}
否。int
对象具有自动存储期限。它在其作用域结束时被销毁,即函数结束时。
无论如何,您不应该free
在 C++ 中使用。它仅在您用于malloc
分配内存时使用,但malloc
在 C++ 中不常用。相反,您应该使用new
动态分配对象。当您创建了一个具有动态存储持续时间的对象时new
,使用delete
来销毁它。
x
是一个堆栈变量,返回时会自动删除doSomething()
。
只有那些手动分配的对象malloc()
必须是free()
d (在 C++ 中非常少见)。也不要在 C++ 中使用 and - 使用free()
and代替。malloc()
new
delete
不,如果您使用动态分配内存,您只需要释放内存new
。在这种情况下,此变量在堆栈中,并在函数结束时被销毁。
您只需要释放已在代码中为其分配内存的变量。在您的示例x
中是在本地声明的,并且程序在堆栈上为其分配内存。在函数结束时,变量被自动销毁。所以你不必担心它。