Поделиться через


Класс allocator_traits

Шаблон класса описывает объект, который дополняет тип распределителя. Тип распределителя — это любой тип, описывающий объект allocator, который используется для управления выделенной памятью. В частности, для любого типа распределителя Alloc можно использовать allocator_traits<Alloc>, чтобы определить все сведения, необходимые контейнеру с распределителем. Дополнительные сведения см. в разделе Класс allocator.

Синтаксис

template <class Alloc>
    class allocator_traits;

Участники

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

Имя Описание
allocator_type Этот тип является синонимом для параметра-шаблона Alloc.
const_pointer Этот тип — Alloc::const_pointer, если он правильно сформирован; в противном случае этот тип — pointer_traits<pointer>::rebind<const value_type>.
const_void_pointer Этот тип — Alloc::const_void_pointer, если он правильно сформирован; в противном случае этот тип — pointer_traits<pointer>::rebind<const void>.
difference_type Этот тип — Alloc::difference_type, если он правильно сформирован; в противном случае этот тип — pointer_traits<pointer>::difference_type.
pointer Этот тип — Alloc::pointer, если он правильно сформирован; в противном случае этот тип — value_type *.
propagate_on_container_copy_assignment Этот тип — Alloc::propagate_on_container_copy_assignment, если он правильно сформирован; в противном случае этот тип — false_type.
propagate_on_container_move_assignment Этот тип — Alloc::propagate_on_container_move_assignment, если он правильно сформирован; в противном случае этот тип — false_type. Если тип содержит значение true, контейнер с поддержкой распределителя копирует его сохраненный распределитель для назначения перемещения.
propagate_on_container_swap Этот тип — Alloc::propagate_on_container_swap, если он правильно сформирован; в противном случае этот тип — false_type. Если тип содержит значение true, контейнер с поддержкой распределителя копирует его сохраненный распределитель в перестановку.
size_type Этот тип — Alloc::size_type, если он правильно сформирован; в противном случае этот тип — make_unsigned<difference_type>::type.
value_type Этот тип является синонимом Alloc::value_type.
void_pointer Этот тип — Alloc::void_pointer, если он правильно сформирован; в противном случае этот тип — pointer_traits<pointer>::rebind<void>.

Статические методы

Следующие статические методы вызывают соответствующий метод в указанном параметре распределителя.

Имя Описание
allocate Статический метод, который выделяет память с помощью указанного параметра распределителя.
construct Статический метод, который используется указанным распределителем для создания объекта.
deallocate Статический метод, который используется указанным распределителем для освобождения указанного количества объектов.
destroy Статический метод, который используется указанным распределителем для вызова деструктора в объекте без освобождения его памяти.
max_size Статический метод, который используется указанным распределителем, чтобы определить максимальное число объектов, которые могут быть распределены.
select_on_container_copy_construction Статический метод, который вызывает select_on_container_copy_construction в указанном распределителе.

распределить

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

static pointer allocate(Alloc& al, size_type count);

static pointer allocate(Alloc& al, size_type count,
    typename allocator_traits<void>::const_pointer* hint);

Параметры

Аль
Объект распределителя.

count
Число элементов для распределения.

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

Возвращаемое значение

Каждый метод возвращает указатель на выделенный объект.

Первый статический метод возвращает al.allocate(count).

Второй метод возвращает al.allocate(count, hint), если это выражение правильно сформировано; в противном случае возвращается al.allocate(count).

construct

Статический метод, который используется указанным распределителем для создания объекта.

template <class Uty, class Types>
static void construct(Alloc& al, Uty* ptr, Types&&... args);

Параметры

Аль
Объект распределителя.

ptr
Указатель места, в котором должен создаваться объект.

args
Список аргументов, передаваемый в конструктор объекта.

Замечания

Эта статическая функция-член вызывает al.construct(ptr, args...), если выражение правильно сформировано; в противном случае оно оценивается как ::new (static_cast<void *>(ptr)) Uty(std::forward<Types>(args)...).

deallocate

Статический метод, который используется указанным распределителем для освобождения указанного количества объектов.

static void deallocate(Alloc al,
    pointer ptr,
    size_type count);

Параметры

Аль
Объект распределителя.

ptr
Указатель на начальное расположение освобождаемых объектов.

count
Количество освобождаемых объектов.

Замечания

Этот метод вызывает al.deallocate(ptr, count).

Этот метод ничего не создает.

destroy

Статический метод, который используется указанным распределителем для вызова деструктора в объекте без освобождения его памяти.

template <class Uty>
    static void destroy(Alloc& al, Uty* ptr);

Параметры

Аль
Объект распределителя.

ptr
Указатель на расположение объекта.

Замечания

Этот метод вызывает al.destroy(ptr), если выражение правильно сформировано; в противном случае оно оценивается как ptr->~Uty().

max_size

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

static size_type max_size(const Alloc& al);

Параметры

Аль
Объект распределителя.

Замечания

Этот метод возвращает al.max_size(), если это выражение правильно сформировано; в противном случае возвращается numeric_limits<size_type>::max().

select_on_container_copy_construction

Статический метод, который вызывает select_on_container_copy_construction в указанном распределителе.

static Alloc select_on_container_copy_construction(const Alloc& al);

Параметры

Аль
Объект распределителя.

Возвращаемое значение

Этот метод возвращает значение al.select_on_container_copy_construction(), если этот тип хорошо сформирован; в противном случае он возвращает значение al.

Замечания

Этот метод используется для указания распределителя при создании копии связанного контейнера.