Этот класс может выделить и создать объект, вызвав 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];
Учитывая класс HybridPoolDynamic с allocObj() и freeObj() как мне реализовать собственный распределитель, чтобы при выделении использовался заданный класс, итератор возвращал указатели на объекты, а не на сами объекты, и как мне создать элемент по умолчанию с помощью этого распределителя?
Подробнее здесь: https://stackoverflow.com/questions/787 ... -will-retu
Мобильная версия