Spec-Zone.ru › C++

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=
[удалено]
оператор копирования присваивания удалён
(публичная член-функция)
Публичные член-функции
allocate
выделяет память
(публичная член-функция)
deallocate
освобождает память
(публичная член-функция)
construct
создаёт объект в выделенной памяти
(публичная член-функция)
destroy
(устарело в C++20)
уничтожает объект в выделенной памяти
(публичная член-функция)
allocate_bytes
(C++20)
выделяет сырую выровненную память из базового ресурса
(публичная член-функция)
deallocate_bytes
(C++20)
освобождает сырую память, полученную из allocate_bytes
(публичная член-функция)
allocate_object
(C++20)
выделяет сырую память, подходящую для объекта или массива
(публичная член-функция)
deallocate_object
(C++20)
освобождает сырую память, полученную с помощью allocate_object
(публичная член-функция)
new_object
(C++20)
выделяет и создаёт объект
(публичная член-функция)
delete_object
(C++20)
уничтожает и освобождает объект
(публичная член-функция)
select_on_container_copy_construction
создаёт новый polymorphic_allocator для использования конструктором копирования контейнера
(публичная член-функция)
resource
возвращает указатель на базовый ресурс памяти
(публичная член-функция)

Функции без параметров

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

Примечания

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

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

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/memory/polymorphic_allocator

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API