Как распределители и перепривязка работают с контейнерами?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как распределители и перепривязка работают с контейнерами?

Сообщение Anonymous »

Сейчас я учусь писать свой собственный распределитель и пытаюсь реализовать его с помощью некоторых классов-контейнеров. Проблема в том, что я не совсем понимаю, как распределитель работает с контейнером списка.

По сути, я попытался создать очень простой распределитель и класс списка для встать и начать. На данный момент я понимаю, что перепривязка позволит мне выделить места для моих 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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