Class template polymorphic_allocator
boost::container::pmr::polymorphic_allocator
Synopsis
Description
Специализация шаблона класса<polymorphic_allocator
>соответствует требованиям Allocator. Построенные с различными ресурсами памяти, различные экземпляры одной и той же специализации могут проявлять совершенно разное поведение распределения. Этот полиморфизм времени выполнения позволяет объектам, которые используютpolymorphic_allocator, вести себя так, как если бы они использовали разные типы распределителей во время выполнения, даже если они используют один и тот же тип статического распределителя.
polymorphic_allocator
public
construct/copy/destruct
- <
polymorphic_allocator()noexcept;
>Эффекты: Устанавливает m_resource до<get_default_resource()
>.
- <
polymorphic_allocator(memory_resource*r);
>Требуется: r не является нулевым.
Эффекты: Устанавливает m_resource на r.
Бросает: Ничего
Примечания: Этот конструктор обеспечивает имплицитное преобразование из Memory_resource*. Нестандартное расширение: если r равно нулю, m_resource настроен на get_default_resource().
- <
polymorphic_allocator(constpolymorphic_allocator&other);
>Эффекты: Устанавливает m_resource to other.resource().
- <
template<typenameU>
polymorphic_allocator(constpolymorphic_allocator<U>&other)noexcept;
>Эффекты: Устанавливает m_resource to other.resource().
- <
polymorphic_allocator&operator=(constpolymorphic_allocator&other);
>Эффекты: Устанавливает m_resource to other.resource().
polymorphic_allocator
public member functions
- <
T*allocate(size_tn);
>Возвращение: Это эквивалентно<static_cast<T*>(m_resource->allocate(n * sizeof(T), alignof(T)))
>
.
- <
voiddeallocate(T*p,size_tn);
>Требуется: p был выделен из ресурса памяти x, равного *m_ресурсу, с использованием<x.allocate(n * sizeof(T), alignof(T))
>.
Эффекты: Эквивалент m_resource->deallocate(p, n* sizeof(T), alignof(T)).
Бросает: Ничего.
- <
template<typenameU,class...Args>voidconstruct(U*p,Args&&...args);
>Требуется: Использование распределительной конструкции Т с распределительной<this->resource()
>и конструкторской аргументацией<std::forward<Args>(args)...
>хорошо сформировано. [Примечание: конструкции распределительных устройств всегда хорошо сформированы для типов, которые не используют распределительные устройства. - конечное примечание]
Эффекты: Постройте T-объект при p по конструкции аллокатора с помощью аргументов распределителя<this->resource()
>и конструктора<std::forward<Args>(args)...
>.
Бросает: Ничего, кроме конструктора для Т-бросков.
- <
template<typenameU>voiddestroy(U*p);
>Эффекты: p->~U().
- <
polymorphic_allocatorselect_on_container_copy_construction()const;
>Возвращение: эквивалентно<polymorphic_allocator()
>
.
- <
memory_resource*resource()const;
>Возвращение: m_resource.