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 представляет собой 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 (public функция-элемент) | |
(деструктор) (объявлено неявно) |
неявно объявленный деструктор (public функция-элемент) |
operator= [удалено] |
оператор присваивания копированием удалён (public функция-элемент) |
Открытые функции-элементы | |
| выделяет память (public функция-элемент) | |
| освобождает память (public функция-элемент) | |
| создаёт объект в выделенном хранилище (public функция-элемент) | |
(устарело в C++20) |
уничтожает объект в выделенном хранилище (public функция-элемент) |
(C++20) |
выделяет сырую выровненную память из базового ресурса (public функция-элемент) |
(C++20) |
освобождает сырую память, полученную из allocate_bytes (public функция-элемент) |
(C++20) |
выделяет сырую память, подходящую для объекта или массива (public функция-элемент) |
(C++20) |
освобождает сырую память, полученную allocate_object (public функция-элемент) |
(C++20) |
выделяет память и создаёт объект (public функция-элемент) |
(C++20) |
уничтожает объект и освобождает память (public функция-элемент) |
создаёт новый polymorphic_allocator для использования конструктором копирования контейнера (public функция-элемент) | |
| возвращает указатель на базовый ресурс памяти (public функция-элемент) | |
Функции, не являющиеся элементами
(удалено в C++20) |
сравнивает два polymorphic_allocator (функция) |
Примечание
polymorphic_allocator не распространяется на присваивание копированием, присваивание перемещением или обмен контейнера. В результате присваивание перемещением контейнера, использующего polymorphic_allocator, может вызвать исключение, а обмен двух контейнеров, использующих polymorphic_allocator, чьи аллокаторы при сравнении не равны, приводит к неопределённому поведению.
| Макрос Тестирования функциональности | Значение | Стандарт | Функциональность |
|---|---|---|---|
__cpp_lib_polymorphic_allocator |
201902L |
(C++20) | std::pmr::polymorphic_allocator<> как тип словаря
|
Смотрите также
(C++17) |
абстрактный интерфейс для классов, которые инкапсулируют ресурсы памяти (класс) |