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) |
абстрактный интерфейс для классов, которые инкапсулируют ресурсы памяти (класс) |