Как распределители и перепривязка работают с контейнерами?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 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Перепривязка сценариев использования CameraX
    Anonymous » » в форуме Android
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Почему распределители C++ используют reinterpret_cast и как этого избежать?
    Anonymous » » в форуме C++
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Как ограничить доступ к классам, чтобы полный доступ имели только распределители?
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Как ограничить доступ к классам, чтобы полный доступ имели только распределители?
    Anonymous » » в форуме C++
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Учитывая, что распределители копируются по значению, как распределяется состояние распределителя?
    Anonymous » » в форуме C++
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous

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