我什么时候才能释放内存? 我学会了C语言,现在我正在学习C++。释放内存对我来说是全新的,我想知道什么时候需要担心内存释放,什么时候不需要担心
据我所知,唯一需要担心内存释放的情况是当我使用我什么时候才能释放内存? 我学会了C语言,现在我正在学习C++。释放内存对我来说是全新的,我想知道什么时候需要担心内存释放,什么时候不需要担心,c++,memory,C++,Memory,据我所知,唯一需要担心内存释放的情况是当我使用new操作符时,因此我应该使用delete来释放内存 但在这些情况下,无需释放内存: 类变量(成员)或静态变量 函数中的局部变量 STL系列(字符串、列表、向量等) 这是真的吗? 还有其他情况下我需要担心内存释放吗?你基本上是对的:你需要平衡新建与删除,新建[]与删除[],以及malloc与免费 良好的编写C++几乎不包含这些,因为您将动态备忘录和寿命管理的责任留给合适的容器或管理类,最显著的是“代码> STD::向量和 STD::UNIQUIG
new
操作符时,因此我应该使用delete
来释放内存但在这些情况下,无需释放内存:
- 类变量(成员)或静态变量李>
- 函数中的局部变量李>
- STL系列(字符串、列表、向量等)李>
还有其他情况下我需要担心内存释放吗?你基本上是对的:你需要平衡
新建
与删除
,新建[]
与删除[]
,以及malloc
与免费
良好的编写C++几乎不包含这些,因为您将动态备忘录和寿命管理的责任留给合适的容器或管理类,最显著的是“代码> STD::向量<胡/代码>和
- 如果我对一个
进行编码,我会立即对相应的new/new[]
delete/delete[]
- 同样,任何
后面紧跟着相关的malloc/calloc
free
<强>注:我提到了上面的点,从C到C++,我不得不面对很多来自C的老的尝试和测试的技术,这导致C++中的问题。
注意到有什么疯狂的情况,因为你使用的代码是<代码>新< /Cord>,但是必须使用<代码>删除[]/Cord>@ PrimaHh:嗯,更准确地说,这种疯狂来自于这样一个事实:new[]
中的“[]
”在词汇上与“new
”一词并不相近,有时它可能位于一条完全不同的线上:-)一个相关但切题的主题是。最重要的是所有权和对象生命周期的概念(在RAII之上)。特别是在指针(普通和智能)和引用可用的情况下,您的代码应该非常清楚哪些对象拥有哪些数据。如果在程序中使用线程,这一点尤其重要。此外,在测试中明智地使用valgrind来验证内存清洁度。面对早期的返回
、中断
或异常,您可能需要更多的思考,而不仅仅是在新建|新建| | malloc
之后盲目地添加一个删除|删除|释放
。即使您使用它们,您也可以使用std::shared_ptr
或std::unique_ptr
以安全的方式管理内存。我完全同意,我并不是说这些都是包罗万象的修复方法:)我只是说,在编写每个new | new[]malloc | calloc
相关的delete | delete[]|free
类型应该放在代码的正确部分(而不是盲目地:)。对于早期的返回
和中断
I代码,其原则是一个函数只有一个退出点,因此我很少遇到这个问题,是的,你是对的:关于函数的提前终止,你需要对此进行计划,并适当地删除/重新考虑函数的流程&有一个返回点。如果你真的进行手动清理,你应该将分配包装在一个try catch
块中,毕竟,您正在调用的函数可能会抛出。可悲的是,C++没有“代码>尝试最后