如何使用对象池为std :: map创建分配器

时间:2010-10-31 10:04:57

标签: c++

这是stl allocator, copy constructor of other type, rebind

的后续内容

我正在使用std :: map并且想要一个可以为内部节点重用存储的自定义分配器。存储的项目是指针,所以我不是在谈论重用它们,而只是地图的内部分配。

主要要求是地图的不同实例不能共享对象池,每个实例必须是唯一的。

我不需要一个完整的解决方案,我只想知道如何处理需要不同类型分配器的所需复制构造函数。在这种情况下,我不知道如何管理内部存储器。

1 个答案:

答案 0 :(得分:2)

正如你在另一个问题中指出的那样,分配器不应该有任何状态。在每个分配器对象中使用线程本地存储或指针到内存池:分配器只是成为该池的特定于类型的接口。

struct MemoryPool {
  // none of this depends on the type of objects being allocated
};

template<class T>
struct MyAllocator {
  template<class U> struct rebind { typedef MyAllocator<U> other; };

  MemoryPool *_pool;  // copied to any allocator constructed

  template<class U>
  MyAllocator(MyAllocator const &other) : _pool(other._pool) {}

  // allocate, deallocate use _pool
  // construct, destruct deal with T
};