Шаг 559.
Библиотека STL. Распределители памяти. Требования к распределителям памяти. Определения типов

    На этом шаге мы рассмотрим определения различных типов.

    В этом и следующих шагах перечислены типы и операции, которые должны поддерживаться распределителями в соответствии с требованиями стандарта. Для распределителей, которые могут использоваться стандартными контейнерами, устанавливаются особые требования - более жесткие, чем для обычных распределителей.

Определения типов

распределитель::value_type
Тип элементов. Эквивалент Т для allocator<T>.
распределитель::size_type
Тип беззнаковых целочисленных значений, представляющих размер наибольшего объекта в модели распределения памяти. Чтобы распределитель мог использоваться со стандартными контейнерами, этот тип должен быть эквивалентен size_t.
распределитель::difference_type
Тип знаковых целочисленных значеиий, представляющих разность между двумя указателями в модели распределения памяти. Чтобы распределитель мог использоваться со стандартными контейнерами, этот тип должен быть эквивалентен ptrdiff_t.
распределитель::pointer
Тип указателя на тип элемента. Чтобы распределитель мог использоваться со стандартными контейнерами, этот тип должен быть эквивалентен Т* для allocator<T>.
распределитель::const_pointer
Тип константного указателя на тип элемента. Чтобы распределитель мог использоваться со стандартными контейнерами, этот тип должен быть эквивалентен const Т* для allocator<T>.
распределитель::reference
Тип ссылки на тип элемента. Эквивалент Т& для allocator<T>.
распределитель::const_reference
Тип константной ссылки на тип элемента. Эквивалент const T& для allocator<T>.
распределитель::rebind
Шаблонная структура, позволяющая любому распределителю косвенно выделять память для другого типа. Объявление должно выглядеть так:
template <class T> 
class распределитель 
{ public:
  template <class U> 
  struct rebind {
    typedef распределитель<U> other;
    .   .   .   .
  };
  .   .   .   .
}
Назначение структуры rebind разъясняется в 557 шаге.

    На следующем шаге мы рассмотрим операции.




Предыдущий шаг Содержание Следующий шаг