По сути, я попытался создать очень простой распределитель и класс списка для встать и начать. На данный момент я понимаю, что перепривязка позволит мне выделить места для моих ListNodes. Выделение и освобождение позволят мне выделить память и вернуть указатель на эту память. А конструкция и деструкция создадут экземпляр в выделенной памяти и вызовут деструкторы для определенного объекта.
- Как мне вызвать перепривязку, чтобы она выделила ресурсы для моих ListNodes?
- Нужно ли мне иметь Объект распределителя в моем классе списка?
- Буду ли я вызывать функции выделения и построения в конструкторе списка, а функции освобождения и уничтожения – для деструктора списка?
- Кроме того, может ли кто-нибудь объяснить, почему структура перепривязки позволяет мне выделять ресурсы для ListNodes? Там только определение типа, поэтому я не совсем понимаю, как это произойдет.
Любая помощь приветствуется. Спасибо.
template
class Allocator{
public:
typedef T value_type;
typedef T* pointer;
typedef size_t size_type;
typedef T& reference;
template
struct rebind{
typedef Allocator other_type;
};
Allocator();
~Allocator();
pointer allocate(size_type n){
pointer p = ::operator new(n*sizeof(T));
return p;
};
void deallocate(pointer p){
::operator delete(p);
return;
};
void construct(pointer p, reference value){
new(p) T(value);
return;
};
void destruct(pointer p){
p->~T();
return;
}
}; // class Allocator
template
class ListNode{
private:
T val;
ListNode* next;
public:
ListNode():val(NULL),next(NULL){};
~ListNode(){};
}; // class ListNode
template
class List{
private:
ListNode *head;
ListNode *tail;
typedef Alloc A;
public:
typedef T value_type;
typedef T* iterator;
typedef T& reference;
List(){};
~List(){};
void insert(T data);
//.... other random functions etc
}; // class List
Подробнее здесь: https://stackoverflow.com/questions/543 ... containers