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 — это оболочка, содержащая динамически выделяемый объект, возможно, различных типов, со семантикой, аналогичной семантике значения.Объект std::polymorphic управляет временем жизни принадлежащего ему объекта. Принадлежащий объект имеет тип T или любой тип, публично и однозначно производный от T. Объект std::polymorphic может не содержать принадлежащего ему объекта только после перемещения; в этом случае он является не имеющим значения .
Каждый объект типа std::polymorphic<T, Allocator> использует объект типа Allocator для выделения и освобождения памяти под принадлежащий ему объект по мере необходимости.
Если программа объявляет явную или частичную специализацию std::polymorphic, поведение не определено.
Параметры шаблона
| T | - | тип принадлежащего объекта |
| Allocator | - | тип связанного аллокатора |
| Требования к типам | ||
-T может быть неполным типом. |
||
-Если T является одним из следующих типов, программа некорректна:
|
||
-Если 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 (функция-член общего доступа) |
|
| уничтожает принадлежащее значение, если оно есть (функция-член общего доступа) |
|
| присваивает содержимое (функция-член общего доступа) |
|
Наблюдатели |
|
| обращается к принадлежащему значению (функция-член общего доступа) |
|
проверяет, не является ли polymorphic не имеющим значения (функция-член общего доступа) |
|
| возвращает связанный аллокатор (функция-член общего доступа) |
|
Модификаторы |
|
| обменивает содержимое (функция-член общего доступа) |
|
Функции, не являющиеся членами
|
(C++26) | специализирует алгоритм std::swap (шаблон функции) |
Примечания
| Макрос проверки поддержки | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_polymorphic | 202502L | (C++26) |
std::polymorphic |
Пример
См. также
|
(C++26) | оболочка, содержащая динамически выделяемый объект со семантикой, аналогичной семантике значения (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/memory/polymorphic