Реализация собственного распределителя для std::map, чтобы оператор возвращал указатели на объекты.C++

Программы на C++. Форум разработчиков
Anonymous
Реализация собственного распределителя для std::map, чтобы оператор возвращал указатели на объекты.

Сообщение Anonymous »

Мне нужно использовать собственную реализацию пула HybridPoolDynamic, чтобы ограничить емкость std::map, а также создавать и распределять объекты.
Этот класс может выделить и создать объект, вызвав allocObj(), а также разрушить и освободить его с помощью freeObj().
Требование состоит в том, чтобы при переборе карты Я получу указатель на объекты, а не на сами объекты. Поэтому я попробовал разместить внутри распределителя два пула: один с объектами, другой с указателями.
Это моя пробная версия:

Код: Выделить всё

template 
class HybridPoolAllocator : public std::allocator{
public:
HybridPoolAllocator(const unsigned int minStackAllocation, const unsigned int maxHeapCapacity):
_pairPool("HybridPairsPoolAlocatorObjmContainer",minStackAllocation,maxHeapCapacity),
_dataPool("HybridDataPoolAlocatorObjmContainer",minStackAllocation,maxHeapCapacity){}
std::pair* allocate(){
T* obj = _dataPool.allocObj();
std::pair* pair = _pairPool.allocObj();
pair->second = obj;
return pair;
}
void deallocate(std::pair* pair){
_dataPool.freeObj(pair->second);
_pairPool.freeObj(pair);
}
protected:
HybridPoolDynamic _pairPool;
HybridPoolDynamic _dataPool;
};
И я использую следующую реализацию:

Код: Выделить всё

typedef  std::map< int,
T*,
std::less,
HybridPoolAllocator > ObjectMap;
ObjectMap myMap;
myMap[0];
Я ожидал, что последняя строка создаст объект T по умолчанию, однако код не достигает точки останова внутри метода allocate(). Думаю, я не реализую для этого правильную подпись?
Учитывая класс HybridPoolDynamic с allocObj() и freeObj() как мне реализовать собственный распределитель, чтобы при выделении использовался заданный класс, итератор возвращал указатели на объекты, а не на сами объекты, и как мне создать элемент по умолчанию с помощью этого распределителя?

Подробнее здесь: https://stackoverflow.com/questions/787 ... -will-retu

Вернуться в «C++»