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