c++ - 在 C++ 中管理内存的理念是什么?

标签 c++ memory-management

在 C++ 中管理内存的设计因素是什么? 例如:程序退出前没有释放内存对象,为什么会出现内存泄漏?一个好的编程语言设计难道不应该维护一个处理这种情况的“foo-table”吗?我知道我有点天真,但是 C++ 中关于类、结构、方法、接口(interface)、抽象类的内存管理设计理念是什么?

当然,人们不可能人道地记住 C++ 的每一个规范。内存管理的核心驱动设计是什么?

最佳答案

What is the core driving design of memory management ?

几乎在所有情况下,您都应该使用自动资源管理。基本上:

  • 在可行的情况下,最好创建具有​​自动存储持续时间的对象(即在堆栈上或函数本地)
  • 当您必须使用动态分配时,请使用范围绑定(bind)资源管理(SBRM;通常称为 Resource Acquisition is Initialization 或 RAII)。

您很少需要编写自己的 RAII 容器:C++ 标准库提供了一整套容器(例如,vectormap)和像 shared_ptr(来自 C++ TR1、C++0x 和 Boost)适用于大多数常见情况。

基本上,在真正优秀的 C++ 代码中,您永远不应该自己调用 delete1 来清理已分配的内存:内存管理和资源清理应该始终是封装在某种容器中。

1.显然,这里的异常(exception)是当您自己实现一个 RAII 容器时,因为该容器必须负责清理它拥有的任何东西。

关于c++ - 在 C++ 中管理内存的理念是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3681455/

相关文章:

C++ 快速排序实现,没有正确的输出

c++ - 使用 MSVC 2013 构建 Polycode 后,我在哪里可以找到库的文件?

c++ - C++变量销毁

c# - 删除老式的终结器

C++ Ifstream 读太多?

c++ - 如何使用静态转换管理共享对象的生命周期?

c++ - AActor在ue4中设置移动性

使用 & 和不使用 & 的 C 3d 数组指针衰减

ios - 在 Objective-C 中释放静态资源

java - 线程消耗的内存