Spec-Zone.ru › C++

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=
[удалён]
оператор копирующего присваивания удалён
(открытая функция-член)
Открытые функции-члены
allocate
выделяет память
(открытая функция-член)
deallocate
освобождает память
(открытая функция-член)
construct
создаёт объект в выделенной памяти
(открытая функция-член)
destroy
(устарело в C++20)(статус устаревшего снят в C++26)
уничтожает объект в выделенной памяти
(открытая функция-член)
allocate_bytes
(C++20)
выделяет необработанную выровненную память из базового ресурса
(открытая функция-член)
deallocate_bytes
(C++20)
освобождает необработанную память, полученную из allocate_bytes
(открытая функция-член)
allocate_object
(C++20)
выделяет необработанную память, подходящую для объекта или массива
(открытая функция-член)
deallocate_object
(C++20)
освобождает необработанную память, полученную с помощью allocate_object
(открытая функция-член)
new_object
(C++20)
выделяет память и создаёт объект
(открытая функция-член)
delete_object
(C++20)
уничтожает объект и освобождает выделенную для него память
(открытая функция-член)
select_on_container_copy_construction
создаёт новый polymorphic_allocator для использования конструктором копирования контейнера
(открытая функция-член)
resource
возвращает указатель на базовый ресурс памяти
(открытая функция-член)

Функции, не являющиеся членами

operator==operator!=
(удалено в C++20)
сравнивает два polymorphic_allocator
(функция)

Примечания

polymorphic_allocator не распространяется при копирующем присваивании контейнера, перемещающем присваивании или обмене. В результате перемещающее присваивание контейнера, использующего polymorphic_allocator, может выбросить исключение, а обмен двух контейнеров, использующих polymorphic_allocator, аллокаторы которых не равны, приводит к неопределённому поведению.

Макрос проверки поддержки возможности Значение Стандарт Возможность
__cpp_lib_polymorphic_allocator 201902L (C++20) std::pmr::polymorphic_allocator<> как словарный тип

См. также

memory_resource
(C++17)
абстрактный интерфейс для классов, инкапсулирующих ресурсы памяти
(класс)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/memory/polymorphic_allocator

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API