将std :: set <t>连接到内存池</t>

时间:2011-06-19 00:39:52

标签: c++

我目前正在尝试使用自定义分配器。我有一个small application实现了一个带内存池的自定义分配器。

它适用于std::vector但是当我使用std::set尝试时,我收到运行时错误:

typedef std::set<Data, std::less<Data>, my_allocator<Data> > PoolSet;

Pool<Data> pool(1024);    
PoolSet set;
set.insert(Data()); // error: no pool found for type: std::_Rb_tree_node<Data>

问题是std :: set使用我的分配器来处理数据和数据节点。由于没有为数据节点注册池,因此代码将失败。

详细信息可在code

中找到

有谁知道我该做些什么来解决这个问题?

1 个答案:

答案 0 :(得分:1)

这是@BenVoigt提到的rebind

http://en.wikipedia.org/wiki/Allocator_(C++)

  

分配人员必须提供   模板类成员template <typename U> struct A::rebind { typedef A<U> other; };,它启用   获得相关的可能性   分配器,以a为参数进行参数化   不同的类型。例如,给定一个   分配器类型IntAllocator   类型int的对象,相关的   类型对象的分配器类型   可以使用long获得   IntAllocator::rebind<long>::other