我什么时候需要释放记忆?

时间:2013-01-31 12:55:00

标签: c++ memory

我学习了C#,现在我学习了C ++。释放记忆的全部意义对我来说都是新的,我想知道什么时候我需要担心记忆释放以及什么时候不记得。

根据我的理解,我唯一担心内存释放的情况是,当我使用new运算符时,我应该使用delete来释放内存。
但在这些情况下,没有必要释放内存:

  • 类变量(成员)或静态变量。
  • 功能中的局部变量。
  • STL系列(字符串,列表,矢量等)。

这是真的吗? 还有其他情况我不得不担心释放内存吗?

2 个答案:

答案 0 :(得分:10)

您基本上做对了:您需要将newdeletenew[]delete[]以及mallocfree进行平衡。

编写良好的C ++几乎不包含任何内容,因为您将动态内存和生命周期管理的责任留给了合适的容器或管理器类,最值得注意的是std::vectorstd::unique_ptr

答案 1 :(得分:0)

作为一般经验法则,我倾向于遵守以下规定:

  • 如果我对new/new[]进行编码,请立即对相应的delete/delete[]
  • 进行编码
  • 同样,任何malloc/calloc后面都会紧跟相关的free

这可以避免许多令人讨厌的情况,您可以在其中生成内存泄漏。 如果你是C ++的新手,我不习惯malloc及其众多变种,它需要大量的脚手架来保持类型安全,除非真正必要,否则可以算作然而,正如所提到的,有时候有必要:例如,当必须使用基于C的库/ API时,您可能需要使用它们。

在主要的时间里,他们很清楚,你的生活会更容易。

注意:我提到了上面的几点,因为从C到C ++我不得不面对很多来自C的旧的经过验证的技术,这会导致C ++出现问题。