Namespaces
Variants

std::pmr:: polymorphic_allocator

From cppreference.net
Memory management library
( exposition only* )
Allocators
pmr::polymorphic_allocator
(C++17)
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
Определено в заголовке <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 является Allокатором , который демонстрирует различное поведение при выделении памяти в зависимости от std::pmr::memory_resource , из которого он создан. Поскольку memory_resource использует полиморфизм времени выполнения для управления выделением памяти, различные экземпляры контейнеров со polymorphic_allocator в качестве их статического типа аллокатора являются совместимыми, но могут вести себя так, как если бы они имели разные типы аллокаторов.

Все специализации polymorphic_allocator удовлетворяют требованиям полноты аллокатора .

Функция-член polymorphic_allocator::construct выполняет uses-allocator construction , так что элементы контейнера, использующего polymorphic_allocator , будут применять тот же аллокатор для собственных выделений памяти. Например, std:: pmr :: vector < std:: pmr :: string > будет использовать один и тот же memory_resource для хранения данных vector и каждого string .

Для неполиморфных аллокаторов аналогичное распространение может быть достигнуто с помощью std::scoped_allocator_adaptor .

Содержание

Типы членов

Тип члена определение
value_type T

Функции-члены

создает polymorphic_allocator
(public member function)
(destructor)
(implicitly declared)
неявно объявленный деструктор
(public member function)
operator=
[deleted]
оператор присваивания копированием удален
(public member function)
Публичные функции-члены
выделяет память
(public member function)
освобождает память
(public member function)
создает объект в выделенной памяти
(public member function)
(deprecated in C++20) (undeprecated in C++26)
уничтожает объект в выделенной памяти
(public member function)
выделяет выровненную необработанную память из базового ресурса
(public member function)
освобождает необработанную память, полученную из allocate_bytes
(public member function)
выделяет необработанную память, подходящую для объекта или массива
(public member function)
освобождает необработанную память, полученную с помощью allocate_object
(public member function)
(C++20)
выделяет память и создает объект
(public member function)
уничтожает объект и освобождает память
(public member function)
создает новый polymorphic_allocator для использования конструктором копирования контейнера
(public member function)
возвращает указатель на базовый ресурс памяти
(public member function)

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

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

Примечания

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

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

Смотрите также

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