这是stl allocator, copy constructor of other type, rebind
的后续内容我正在使用std :: map并且想要一个可以为内部节点重用存储的自定义分配器。存储的项目是指针,所以我不是在谈论重用它们,而只是地图的内部分配。
主要要求是地图的不同实例不能共享对象池,每个实例必须是唯一的。
我不需要一个完整的解决方案,我只想知道如何处理需要不同类型分配器的所需复制构造函数。在这种情况下,我不知道如何管理内部存储器。
答案 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
};