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=
[удалено] | оператор копирования присваивания удалён (публичная член-функция) |
Публичные член-функции |
|
| выделяет память (публичная член-функция) |
|
| освобождает память (публичная член-функция) |
|
| создаёт объект в выделенной памяти (публичная член-функция) |
|
|
(устарело в C++20) | уничтожает объект в выделенной памяти (публичная член-функция) |
|
(C++20) | выделяет сырую выровненную память из базового ресурса (публичная член-функция) |
|
(C++20) | освобождает сырую память, полученную из allocate_bytes (публичная член-функция) |
|
(C++20) | выделяет сырую память, подходящую для объекта или массива (публичная член-функция) |
|
(C++20) | освобождает сырую память, полученную с помощью allocate_object (публичная член-функция) |
|
(C++20) | выделяет и создаёт объект (публичная член-функция) |
|
(C++20) | уничтожает и освобождает объект (публичная член-функция) |
создаёт новый polymorphic_allocator для использования конструктором копирования контейнера (публичная член-функция) |
|
| возвращает указатель на базовый ресурс памяти (публичная член-функция) |
|
Функции без параметров
|
(удалено в C++20) | сравнивает два polymorphic_allocator (функция) |
Примечания
polymorphic_allocator не распространяется на копирование присваивания, перемещение присваивания или обмен контейнеров. В результате, перемещающее присваивание контейнера, использующего polymorphic_allocator, может вызвать исключение, а обмен двумя контейнерами, использующими polymorphic_allocator, распределители которых не равны при сравнении, приводит к неопределенному поведению.
| Макросы проверки функций | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_polymorphic_allocator | 201902L | (C++20) |
std::pmr::polymorphic_allocator<> как тип словаря |
См. также
|
(C++17) | абстрактный интерфейс для классов, инкапсулирующих ресурсы памяти (класс) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/memory/polymorphic_allocator