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