在 cpp 中,我是否必须始终"free"原始变量?
In cpp, do I have to always "free" the primitive variables?
如果我有一个声明int
的function
,在这个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()
,而是使用new
和delete
。
不,只有在使用new
动态分配内存时才需要释放内存。在本例中,该变量位于堆栈中,并在函数结束时销毁。
您只需要释放在代码中为其分配内存的变量。在您的示例中,x
是在本地声明的,程序在堆栈上为它分配内存。在函数结束时,变量被自动销毁。所以你不需要担心它
相关文章:
- 将浮动的heightmap数组导出为16位原始值
- 给定一个向量,如何找到该向量的所有子集和的原始索引
- 有没有办法从非C/C++文件中读取C++原始字符串文字的内容
- 是否可以将llvm::FunctionType转换为C/C++原始函数指针
- 如何将原始字节附加到 std::vector?
- 从堆栈分配的原始指针构造智能指针
- 如何重写全局方法名称以在调用原始方法之前将我的代码推到前面
- 尝试构建"lock-free"数据结构C++
- 将unique_ptr分配给原始指针
- 是否可以从 OpenGL 缓冲区获取原始大小的像素?
- 使用 OpenSSL 从内存中读取原始 SSL/TLS 证书
- 如何将唯一指针的 std::vector 转换为原始指针的 std::span?
- 从原始字节解码协议缓冲区(以 C++为单位)
- C ++如何在原始抽象类中创建一个函数,该函数接受派生类的输入
- C++:尝试使用等效的 STL 算法消除原始循环
- 如何在连接器 C++ 中将原始字节转换为字符串
- 通过引用传递类不会更改原始类
- 调用 free() 有时会导致程序崩溃
- 实现使用模板化类而不使原始类成为模板的类
- 在 cpp 中,我是否必须始终"free"原始变量?