std::allocator_traits
Материал из cppreference.com
Определено в заголовочном файле <memory>
|
||
template< class Alloc > struct allocator_traits; |
(начиная с C++11) | |
Шаблонный класс allocator_traits
предоставляет стандартизированный способ доступа к различным свойствам Allocator-ов. Стандартные контейнеры и другие компоненты стандартной библиотеки получают доступ к алокаторам через этот шаблон, что позволяет использовать любой тип класса в качестве алокатора, если пользовательская специализация 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
|
[править] Смотрите также
аллокатор по умолчанию (шаблон класса) | |
(C++11) |
реализует многоуровневый аллокатор для многоуровневых контейнеров (шаблон класса) |
(C++11) |
предоставляет информацию о типах, подобных указателям (шаблон класса) |