Пространства имён
Варианты
Действия

std::allocator_traits

Материал из cppreference.com
< cpp‎ | memory
 
 
Динамическое управление памятью
no section name
Ограниченные алгоритмы неинициализированной памяти
no section name
allocator_traits
(C++11)
Поддержка сбора мусора
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)



no section name
 
 
Определено в заголовочном файле <memory>
template< class Alloc >
struct allocator_traits;
(начиная с C++11)

Шаблонный класс allocator_traits предоставляет стандартизированный способ доступа к различным свойствам Allocator-ов. Стандартные контейнеры и другие компоненты стандартной библиотеки получают доступ к алокаторам через этот шаблон, что позволяет использовать любой тип класса в качестве алокатора, если пользовательская специализация std::allocator_traits реализует все необходимые функции.

Программа, объявляющая явную или частичную специализацию std::allocator_traits, некорректна и не требует диагностики.

(начиная с C++23)

Неспециализированный std::allocator_traits по умолчанию содержит следующие элементы:

Содержание

[править] Типы элементы

Тип Определение
allocator_type Alloc
value_type Alloc::value_type
pointer Alloc::pointer, если присутствует, иначе value_type*
const_pointer Alloc::const_pointer, если присутствует, иначе std::pointer_traits<pointer>::rebind<const value_type>
void_pointer Alloc::void_pointer, если присутствует, иначе std::pointer_traits<pointer>::rebind<void>
const_void_pointer Alloc::const_void_pointer, если присутствует, иначе std::pointer_traits<pointer>::rebind<const void>
difference_type Alloc::difference_type, если присутствует, иначе std::pointer_traits<pointer>::difference_type
size_type Alloc::size_type, если присутствует, иначе std::make_unsigned<difference_type>::type
propagate_on_container_copy_assignment Alloc::propagate_on_container_copy_assignment, если присутствует, иначе std::false_type
propagate_on_container_move_assignment Alloc::propagate_on_container_move_assignment, если присутствует, иначе std::false_type
propagate_on_container_swap Alloc::propagate_on_container_swap, если присутствует, иначе std::false_type
is_always_equal Alloc::is_always_equal, если присутствует, иначе std::is_empty<Alloc>::type

[править] Элементы шаблоны псевдонимы

Тип Определение
rebind_alloc<T> Alloc::rebind<T>::other если присутствует, иначе SomeAllocator<T, Args>, если этот Alloc имеет вид SomeAllocator<U, Args>, где Args ноль или больше аргументов типа
rebind_traits<T> std::allocator_traits<rebind_alloc<T>>

[править] Функции-элементы

[static]
выделяет неинициализированное хранилище с помощью аллокатора
(public static функция-элемент) [править]
[static] (C++23)
выделяет память не менее запрошенного размера с помощью аллокатора
(public static функция-элемент) [править]
[static]
освобождает память с помощью аллокатора
(public static функция-элемент) [править]
[static]
создаёт объект в выделенном хранилище
(шаблон функции) [править]
[static]
уничтожает объект, хранящийся в выделенном хранилище
(шаблон функции) [править]
[static]
возвращает максимальный размер объекта, поддерживаемый аллокатором
(public static функция-элемент) [править]
получает аллокатор для использования после копирования стандартного контейнера
(public static функция-элемент) [править]

[править] Отчёты о дефектах

Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:

Номер Применён Поведение в стандарте Корректное поведение
LWG 2108 C++11 не было способа показать, что аллокатор не имеет состояния предоставлено is_always_equal

[править] Смотрите также

аллокатор по умолчанию
(шаблон класса) [править]
реализует многоуровневый аллокатор для многоуровневых контейнеров
(шаблон класса) [править]
предоставляет информацию о типах, подобных указателям
(шаблон класса) [править]