Spec-Zone.ru › C++

std::polymorphic

Определён в заголовке <memory>
template< class T, class Allocator = std::allocator<T> >
class polymorphic;
(1) (начиная с C++26)
namespace pmr {
    template< class T >
    using polymorphic =
        std::polymorphic<T, std::pmr::polymorphic_allocator<T>>;
}
(2) (начиная с C++26)
1) std::polymorphic — это оболочка, содержащая динамически выделяемый объект, возможно, различных типов, со семантикой, аналогичной семантике значения.
2) std::pmr::polymorphic — это псевдоним шаблона, использующий полиморфный аллокатор.

Объект std::polymorphic управляет временем жизни принадлежащего ему объекта. Принадлежащий объект имеет тип T или любой тип, публично и однозначно производный от T. Объект std::polymorphic может не содержать принадлежащего ему объекта только после перемещения; в этом случае он является не имеющим значения .

Каждый объект типа std::polymorphic<T, Allocator> использует объект типа Allocator для выделения и освобождения памяти под принадлежащий ему объект по мере необходимости.

Если программа объявляет явную или частичную специализацию std::polymorphic, поведение не определено.

Параметры шаблона

T - тип принадлежащего объекта
Allocator - тип связанного аллокатора
Требования к типам
-T может быть неполным типом.
-Если T является одним из следующих типов, программа некорректна:
  • не-объектный тип
  • тип массива
  • std::in_place_t
  • специализация std::in_place_type_t
  • тип с квалификаторами cv
-Если Allocator не удовлетворяет требованиям Allocator, программа некорректна.
-Если std::allocator_traits<Allocator>::value_type не является тем же типом, что и T, программа некорректна.

Вложенные типы

Тип Определение
value_type T
allocator_type Allocator
pointer typenamestd::allocator_traits<Allocator>::pointer
const_pointer typenamestd::allocator_traits<Allocator>::const_pointer

Члены-данные

Член Описание
Allocator alloc связанный аллокатор
(член-объект только для экспозиции*)

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

(конструктор)
создаёт объект polymorphic
(функция-член общего доступа)
(деструктор)
уничтожает принадлежащее значение, если оно есть
(функция-член общего доступа)
operator=
присваивает содержимое
(функция-член общего доступа)
Наблюдатели
operator->operator*
обращается к принадлежащему значению
(функция-член общего доступа)
valueless_after_move
проверяет, не является ли polymorphic не имеющим значения
(функция-член общего доступа)
get_allocator
возвращает связанный аллокатор
(функция-член общего доступа)
Модификаторы
swap
обменивает содержимое
(функция-член общего доступа)

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

std::swap(std::polymorphic)
(C++26)
специализирует алгоритм std::swap
(шаблон функции)

Примечания

Макрос проверки поддержки Значение Стандарт Возможность
__cpp_lib_polymorphic 202502L (C++26) std::polymorphic

Пример

См. также

indirect
(C++26)
оболочка, содержащая динамически выделяемый объект со семантикой, аналогичной семантике значения
(шаблон класса)

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

Spec-Zone.ru

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