std::allocator_traits
Определён в заголовке <memory> | ||
|---|---|---|
template< class Alloc > struct allocator_traits; | (начиная с C++11) |
Шаблон класса 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<constvalue_type> |
void_pointer |
Alloc::void_pointer, если присутствует, иначе std::pointer_traits<pointer>::rebind<void> |
const_void_pointer |
Alloc::const_void_pointer, если присутствует, иначе std::pointer_traits<pointer>::rebind<constvoid> |
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] | выделяет неинициализированную память с помощью аллокатора (открытая статическая функция-член) |
|
[static] (C++23) | выделяет с помощью аллокатора память размером не меньше запрошенного (открытая статическая функция-член) |
|
[static] | освобождает память с помощью аллокатора (открытая статическая функция-член) |
|
[static] | создаёт объект в выделенной памяти (шаблон функции) |
|
[static] | уничтожает объект, хранящийся в выделенной памяти (шаблон функции) |
|
[static] | возвращает максимальный размер объекта, поддерживаемый аллокатором (открытая статическая функция-член) |
|
[static] | получает аллокатор, используемый после копирования стандартного контейнера (открытая статическая функция-член) |
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.
| DR | Применён к | Опубликованное поведение | Правильное поведение |
|---|---|---|---|
| LWG 2108 | C++11 | не было способа указать, что аллокатор не имеет состояния |
is_always_equal предоставлен |
См. также
|
(C++11) | контейнер, использующий аллокатор; использование связанных характеристик (например, propagate_on_container_swap)(именованное требование) |
| аллокатор по умолчанию (шаблон класса) |
|
|
(C++11) | реализует многоуровневый аллокатор для многоуровневых контейнеров (шаблон класса) |
|
(C++11) | предоставляет информацию о типах, подобных указателям (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/memory/allocator_traits