我正在为 STL 编写一个基于堆栈的分配器。这个想法是一次分配一大块内存,并在构造对象时让它建立起来,然后在需要时将其重置为零。例如,这可用于存储游戏的关卡信息或为游戏循环的单次迭代创建的对象。当你加载一个关卡时,你建立了堆栈,当你需要加载一个新的关卡时,你只需将顶部指针重置为开头,不需要操作系统调用。
现在我的问题是标准分配器做事的方式,即deallocate()
函数。在这篇文章中,我可以读到
在默认分配器中,使用 ::operator delete 释放存储块。
这意味着通过使用该deallocate()
函数,既可以释放内存,又可以调用析构函数。现在为了我的分配器的目的,我可以使deallocate()
函数为空,因为我不会为单个对象释放内存。
那么问题来了,STL 容器如何使用分配器类来创建新对象?由于默认分配器使用new
and delete
,容器是否曾经调用construct()
or destroy()
?我应该让我的deallocate()
函数也调用 descutor 吗?
我想同样的问题也适用于allocate()
andconstruct()
方法。