我学习了C#,现在我学习了C ++。释放记忆的全部意义对我来说都是新的,我想知道什么时候我需要担心记忆释放以及什么时候不记得。
根据我的理解,我唯一担心内存释放的情况是,当我使用new
运算符时,我应该使用delete
来释放内存。
但在这些情况下,没有必要释放内存:
这是真的吗? 还有其他情况我不得不担心释放内存吗?
答案 0 :(得分:10)
您基本上做对了:您需要将new
与delete
,new[]
与delete[]
以及malloc
与free
进行平衡。
编写良好的C ++几乎不包含任何内容,因为您将动态内存和生命周期管理的责任留给了合适的容器或管理器类,最值得注意的是std::vector
和std::unique_ptr
。
答案 1 :(得分:0)
作为一般经验法则,我倾向于遵守以下规定:
new/new[]
进行编码,请立即对相应的delete/delete[]
malloc/calloc
后面都会紧跟相关的free
这可以避免许多令人讨厌的情况,您可以在其中生成内存泄漏。
如果你是C ++的新手,我不习惯malloc
及其众多变种,它需要大量的脚手架来保持类型安全,除非真正必要,否则可以算作坏然而,正如所提到的,有时候有必要:例如,当必须使用基于C的库/ API时,您可能需要使用它们。
在主要的时间里,他们很清楚,你的生活会更容易。
注意:我提到了上面的几点,因为从C到C ++我不得不面对很多来自C的旧的经过验证的技术,这会导致C ++出现问题。