Пространства имён
Варианты
Действия

std::pmr::polymorphic_allocator

Материал из cppreference.com
< cpp‎ | memory
 
 
Динамическое управление памятью
no section name
Ограниченные алгоритмы неинициализированной памяти
no section name
Поддержка сбора мусора
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)



no section name
 
 
Определено в заголовочном файле <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_typeT

[править]Функции-элементы

создаёт polymorphic_allocator
(public функция-элемент)[править]
(деструктор)
(объявлено неявно)
неявно объявленный деструктор
(public функция-элемент)[править]
operator=
[удалено]
оператор присваивания копированием удалён
(public функция-элемент)[править]
Открытые функции-элементы
выделяет память
(public функция-элемент)[править]
освобождает память
(public функция-элемент)[править]
создаёт объект в выделенном хранилище
(public функция-элемент)[править]
(устарело в C++20)
уничтожает объект в выделенном хранилище
(public функция-элемент)[править]
выделяет сырую выровненную память из базового ресурса
(public функция-элемент)[править]
освобождает сырую память, полученную из allocate_bytes
(public функция-элемент)[править]
выделяет сырую память, подходящую для объекта или массива
(public функция-элемент)[править]
освобождает сырую память, полученную allocate_object
(public функция-элемент)[править]
(C++20)
выделяет память и создаёт объект
(public функция-элемент)[править]
уничтожает объект и освобождает память
(public функция-элемент)[править]
создаёт новый polymorphic_allocator для использования конструктором копирования контейнера
(public функция-элемент)[править]
возвращает указатель на базовый ресурс памяти
(public функция-элемент)[править]

[править]Функции, не являющиеся элементами

(удалено в C++20)
сравнивает два polymorphic_allocator
(функция)[править]

[править]Примечание

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

Макрос Тестирования функциональностиЗначениеСтандартФункциональность
__cpp_lib_polymorphic_allocator201902L(C++20)std::pmr::polymorphic_allocator<> как тип словаря

[править]Смотрите также

абстрактный интерфейс для классов, которые инкапсулируют ресурсы памяти
(класс)[править]
close