我学习了 C#,现在我正在学习 C++。释放内存的全部意义对我来说是新的,我想知道什么时候需要担心内存释放,什么时候不需要。
据我了解,我唯一需要担心内存释放的情况是我使用new
运算符时,所以我应该使用delete
.
但在这些情况下,不需要释放内存:
- 类变量(成员),或静态变量。
- 函数中的局部变量。
- STL 系列(字符串、列表、向量等)。
这是真的?
还有其他情况我必须担心内存释放吗?
你基本上是对的:你需要平衡new
、delete
和。new[]
delete[]
malloc
free
编写良好的 C++ 将几乎不包含这些,因为您将动态内存和生命周期管理的责任留给合适的容器或管理器类,最值得注意的是std::vector
和std::unique_ptr
.
作为一般经验法则,我倾向于遵守以下规定:
new/new[]
我立即编码相应的delete/delete[]
malloc/calloc
紧随其后的是相关的free
这避免了许多可能产生内存泄漏的令人讨厌的情况。如果你是 C++ 的新手,我不会习惯malloc
它的许多变体,它需要大量的脚手架来保持类型安全,除非真的有必要,否则这可以算作一件坏事,但是,如前所述,有时它是必要的:例如,当必须使用基于 C 的库/API 时,您可能需要使用它们。
主要是远离它们,你的生活会容易得多。
注意:我提到了上面的几点,因为我已经从 C 转到 C++,我不得不面对许多来自 C 的旧的经过试验和测试的技术,这些技术会导致 C++ 出现问题。