【发布时间】:2011-06-21 07:22:49
【问题描述】:
有人知道允许动态分配器在使用前传递给容器实例的 STL 实现吗?
场景是我们有一个通用内存分配器,它管理多个内存池,对于 stl::vector 的每个实例,我们希望从不同的内存池分配每个实例。
标准 STL 实现的问题在于,您只能基于类型定义内存池,即所有 int 类型的向量将从同一个池中分配。
我已经将我们的默认 stl::allocator 换成了一个有状态的池,即我们要从中分配这个实例的池,但这对于 stl::list 来说并不适用,它在默认 ctor。
由于与我们的库相关的原因,我们在 ctor 中也没有针对所有对象的有效池,因此我们希望在用户可以使用 stl 容器之前调用“设置内存池”函数。
有没有人遇到过支持这种事情的实现?
【问题讨论】:
-
是Microsoft STL在其构造函数中分配列表的头节点吗?理想的 STL 实现(阅读 GNU)在构造空容器时不会使用任何内存分配。
-
是的,微软和我的 GNU 端口(大约 gcc 3.4.1)都在 ctor 中分配头节点。另一方面,STLPort 没有,因此这支持我的要求,请参阅完整示例源的答案。