std::pmr::polymorphic_allocator
Определён в заголовочном файле <memory_resource> | ||
|---|---|---|
template< class T > class polymorphic_allocator; |
(начиная с C++17) (до C++20) | |
template< class T = std::byte > class polymorphic_allocator; | (начиная с C++20) |
Шаблон класса std::pmr::polymorphic_allocator — это аллокатор, поведение которого при выделении памяти зависит от std::pmr::memory_resource, на основе которого он создан. Поскольку memory_resource использует динамический полиморфизм для управления выделением памяти, разные экземпляры контейнеров со статическим типом аллокатора polymorphic_allocator могут взаимодействовать друг с другом, но вести себя так, как если бы у них были разные типы аллокаторов.
Все специализации polymorphic_allocator соответствуют требованиям полноты аллокатора.
Функция-член polymorphic_allocator::construct выполняет конструирование с использованием аллокатора, чтобы элементы контейнера, использующего polymorphic_allocator, применяли тот же аллокатор для собственного выделения памяти. Например, std::pmr::vector<std::pmr::string> будет использовать один и тот же memory_resource для хранилища vector и хранилища каждого string.
Для неполиморфных аллокаторов аналогичного распространения можно добиться с помощью std::scoped_allocator_adaptor.
Типы-члены
| Тип-член | определение |
|---|---|
value_type |
T |
Функции-члены
создаёт polymorphic_allocator (открытая функция-член) |
|
|
(деструктор)
(объявлен неявно) | деструктор, объявленный неявно (открытая функция-член) |
|
operator=
[удалён] | оператор копирующего присваивания удалён (открытая функция-член) |
Открытые функции-члены |
|
| выделяет память (открытая функция-член) |
|
| освобождает память (открытая функция-член) |
|
| создаёт объект в выделенной памяти (открытая функция-член) |
|
|
(устарело в C++20)(статус устаревшего снят в C++26) | уничтожает объект в выделенной памяти (открытая функция-член) |
|
(C++20) | выделяет необработанную выровненную память из базового ресурса (открытая функция-член) |
|
(C++20) | освобождает необработанную память, полученную из allocate_bytes (открытая функция-член) |
|
(C++20) | выделяет необработанную память, подходящую для объекта или массива (открытая функция-член) |
|
(C++20) | освобождает необработанную память, полученную с помощью allocate_object (открытая функция-член) |
|
(C++20) | выделяет память и создаёт объект (открытая функция-член) |
|
(C++20) | уничтожает объект и освобождает выделенную для него память (открытая функция-член) |
создаёт новый polymorphic_allocator для использования конструктором копирования контейнера (открытая функция-член) |
|
| возвращает указатель на базовый ресурс памяти (открытая функция-член) |
|
Функции, не являющиеся членами
|
(удалено в C++20) | сравнивает два polymorphic_allocator (функция) |
Примечания
polymorphic_allocator не распространяется при копирующем присваивании контейнера, перемещающем присваивании или обмене. В результате перемещающее присваивание контейнера, использующего polymorphic_allocator, может выбросить исключение, а обмен двух контейнеров, использующих polymorphic_allocator, аллокаторы которых не равны, приводит к неопределённому поведению.
| Макрос проверки поддержки возможности | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_polymorphic_allocator | 201902L | (C++20) |
std::pmr::polymorphic_allocator<> как словарный тип |
См. также
|
(C++17) | абстрактный интерфейс для классов, инкапсулирующих ресурсы памяти (класс) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/memory/polymorphic_allocator