我正在为STL编写基于堆栈的分配器。这个想法是一次分配一大块内存,让它在构建对象时建立起来,然后在需要时将其重置为零。例如,这可用于存储游戏级别信息或用于为游戏循环的单次迭代创建的对象。当你加载一个级别时,你建立了堆栈,当你需要加载一个新的级别时,你只需将顶部指针重置到开始位置,不需要OS调用。删除分配给自定义新运算符的对象
现在我的问题是标准分配器的做法,即deallocate()
函数。在this文章中,我可以读取
在缺省分配,存储块被释放使用 ::运算符删除。
这意味着通过使用deallocate()
函数,内存被释放并且析构函数被调用。现在对于我的分配器的purpouse,我可以使deallocate()
函数为空,因为我不会为单个对象释放内存。
所以,问题是,STL容器如何使用分配器类来创建新对象?由于默认分配器使用new
和delete
,容器有没有呼叫construct()
或destroy()
?我应该让我的deallocate()
函数也调用descrutor?
我想同样的问题是allocate()
和construct()
方法。