在 C++ 中管理内存的设计因素是什么? 例如:程序退出前没有释放内存对象,为什么会出现内存泄漏?一个好的编程语言设计难道不应该维护一个处理这种情况的“foo-table”吗?我知道我有点天真,但是 C++ 中关于类、结构、方法、接口(interface)、抽象类的内存管理设计理念是什么?
当然,人们不可能人道地记住 C++ 的每一个规范。内存管理的核心驱动设计是什么?
最佳答案
What is the core driving design of memory management ?
几乎在所有情况下,您都应该使用自动资源管理。基本上:
- 在可行的情况下,最好创建具有自动存储持续时间的对象(即在堆栈上或函数本地)
- 当您必须使用动态分配时,请使用范围绑定(bind)资源管理(SBRM;通常称为 Resource Acquisition is Initialization 或 RAII)。
您很少需要编写自己的 RAII 容器:C++ 标准库提供了一整套容器(例如,vector
和 map
)和像 shared_ptr
(来自 C++ TR1、C++0x 和 Boost)适用于大多数常见情况。
基本上,在真正优秀的 C++ 代码中,您永远不应该自己调用 delete
1 来清理已分配的内存:内存管理和资源清理应该始终是封装在某种容器中。
1.显然,这里的异常(exception)是当您自己实现一个 RAII 容器时,因为该容器必须负责清理它拥有的任何东西。
关于c++ - 在 C++ 中管理内存的理念是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3681455/