【发布时间】:2012-07-22 13:38:00
【问题描述】:
我正在为 STL 编写一个基于堆栈的分配器。这个想法是一次分配一大块内存,并在构造对象时让它建立起来,然后在需要时将其重置为零。例如,这可用于存储游戏的关卡信息或为游戏循环的单次迭代创建的对象。当你加载一个关卡时,你建立了堆栈,当你需要加载一个新的关卡时,你只需将顶部指针重置为开头,不需要操作系统调用。
现在我的问题是标准分配器的处理方式,即deallocate() 函数。在this 文章中我可以读到
在默认分配器中,存储块被释放使用 ::运算符删除。
这意味着通过使用deallocate() 函数,既可以释放内存,又可以调用析构函数。现在为了分配器的目的,我可以将 deallocate() 函数设为空,因为我不会为单个对象释放内存。
那么,问题是,STL 容器如何使用分配器类来创建新对象?由于默认分配器使用new 和delete,容器是否曾调用construct() 或destroy()? 我是否应该让我的deallocate() 函数也调用描述符?
我猜allocate() 和construct() 方法也有同样的问题。
【问题讨论】:
标签: c++ memory memory-management