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
является
Allокатором
, который демонстрирует различное поведение при выделении памяти в зависимости от
std::pmr::memory_resource
, из которого он создан. Поскольку
memory_resource
использует полиморфизм времени выполнения для управления выделением памяти, различные экземпляры контейнеров со
polymorphic_allocator
в качестве их статического типа аллокатора являются совместимыми, но могут вести себя так, как если бы они имели разные типы аллокаторов.
Все специализации
polymorphic_allocator
удовлетворяют
требованиям полноты аллокатора
.
Функция-член
polymorphic_allocator::construct
выполняет
uses-allocator construction
, так что элементы контейнера, использующего
polymorphic_allocator
, будут применять тот же аллокатор для собственных выделений памяти. Например,
std::
pmr
::
vector
<
std::
pmr
::
string
>
будет использовать один и тот же
memory_resource
для хранения данных
vector
и каждого
string
.
Для неполиморфных аллокаторов аналогичное распространение может быть достигнуто с помощью std::scoped_allocator_adaptor .
Содержание |
Типы членов
| Тип члена | определение |
value_type
|
T
|
Функции-члены
создает
polymorphic_allocator
(public member function) |
|
|
(destructor)
(implicitly declared)
|
неявно объявленный деструктор
(public member function) |
|
operator=
[deleted]
|
оператор присваивания копированием удален
(public member function) |
Публичные функции-члены |
|
|
выделяет память
(public member function) |
|
|
освобождает память
(public member function) |
|
|
создает объект в выделенной памяти
(public member function) |
|
|
(deprecated in C++20)
(undeprecated in C++26)
|
уничтожает объект в выделенной памяти
(public member function) |
|
(C++20)
|
выделяет выровненную необработанную память из базового ресурса
(public member function) |
|
(C++20)
|
освобождает необработанную память, полученную из
allocate_bytes
(public member function) |
|
(C++20)
|
выделяет необработанную память, подходящую для объекта или массива
(public member function) |
|
(C++20)
|
освобождает необработанную память, полученную с помощью
allocate_object
(public member function) |
|
(C++20)
|
выделяет память и создает объект
(public member function) |
|
(C++20)
|
уничтожает объект и освобождает память
(public member function) |
создает новый
polymorphic_allocator
для использования конструктором копирования контейнера
(public member function) |
|
|
возвращает указатель на базовый ресурс памяти
(public member function) |
|
Функции, не являющиеся членами класса
|
(удалено в C++20)
|
сравнение двух
polymorphic_allocator
ов
(функция) |
Примечания
polymorphic_allocator
не распространяется при копирующем присваивании контейнера, перемещающем присваивании или обмене. В результате перемещающее присваивание контейнера, использующего
polymorphic_allocator
, может генерировать исключение, а обмен двух контейнеров с
polymorphic_allocator
, чьи аллокаторы не сравниваются как равные, приводит к неопределённому поведению.
| Макрос тестирования возможностей | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_polymorphic_allocator
|
201902L
|
(C++20) |
std::pmr::polymorphic_allocator<>
как тип словаря
|
Смотрите также
|
(C++17)
|
абстрактный интерфейс для классов, инкапсулирующих ресурсы памяти
(класс) |