std::polymorphic<T, Allocator>:: polymorphic
|
constexpr
explicit
polymorphic
(
)
;
|
(1) | (начиная с C++26) |
|
constexpr
explicit
polymorphic
(
std::
allocator_arg_t
,
const
Allocator
&
a
)
;
|
(2) | (начиная с C++26) |
|
template
<
class
U
=
T
>
constexpr explicit polymorphic ( U && v ) ; |
(3) | (начиная с C++26) |
|
template
<
class
U
=
T
>
constexpr
explicit
polymorphic
(
std::
allocator_arg_t
,
const
Allocator
&
a,
|
(4) | (начиная с C++26) |
|
template
<
class
U,
class
...
Args
>
constexpr explicit polymorphic ( std:: in_place_type_t < U > , Args && ... args ) ; |
(5) | (начиная с C++26) |
|
template
<
class
U,
class
...
Args
>
constexpr
explicit
polymorphic
(
std::
allocator_arg_t
,
const
Allocator
&
a,
|
(6) | (начиная с C++26) |
|
template
<
class
U,
class
I,
class
...
Args
>
constexpr
explicit
polymorphic
(
std::
in_place_type_t
<
U
>
,
|
(7) | (начиная с C++26) |
|
template
<
class
U,
class
I,
class
...
Args
>
constexpr
explicit
polymorphic
(
std::
allocator_arg_t
,
const
Allocator
&
a,
|
(8) | (начиная с C++26) |
|
constexpr
polymorphic
(
const
polymorphic
&
other
)
;
|
(9) | (начиная с C++26) |
|
constexpr
polymorphic
(
std::
allocator_arg_t
,
const
Allocator
&
a,
const polymorphic & other ) ; |
(10) | (начиная с C++26) |
|
constexpr
polymorphic
(
polymorphic
&&
other
)
noexcept
;
|
(11) | (начиная с C++26) |
|
constexpr
polymorphic
(
std::
allocator_arg_t
,
const
Allocator
&
a,
polymorphic && other ) noexcept ( /* см. ниже */ ) ; |
(12) | (начиная с C++26) |
Создает новый
polymorphic
объект.
Содержание |
Параметры
| a | - | аллокатор, который будет ассоциирован |
| v | - | значение для инициализации владеемого значения |
| args | - | аргументы для инициализации владеемого значения |
| il | - | список инициализации для инициализации владеемого значения |
| other | - |
другой
polymorphic
объект, чье владеемое значение (если существует) копируется
|
Эффекты
Создание нового
polymorphic
объекта состоит из следующих шагов:
alloc
:
-
Если инициализатор для
allocпуст, он инициализируется значением . -
Если инициализатор для
allocне пуст, он прямо несписочно инициализируется с аргументом инициализатора.
-
Для перегрузок
(
1-8
)
, вызывает
std::
allocator_traits
<
Allocator
>
::
construct
(
alloc ,p, args... ) , где-
p
- указатель типа
U*, который указывает на память, подходящую для создания содержащегося объекта, и - args... - пакет выражений, содержащий аргументы инициализации.
-
p
- указатель типа
-
Для перегрузок
(
9-12
)
:
- Если other не содержит значения, содержащийся объект не создается, и * this также не содержит значения после создания.
-
Иначе, если
other
является rvalue-ссылкой и
allocравен other.alloc, * this принимает владение содержащимся объектом из other . -
Иначе, содержащийся объект создается с использованием
allocкак описано выше, где тип p определяется типом объекта, содержащегося в other .
| Перегрузка | Инициализатор для... | Тип владеемого объекта |
valueless_after_move()
после конструирования |
|
|---|---|---|---|---|
alloc
|
владеемого объекта | |||
| ( 1 ) | (пусто) | (пусто) |
T
|
false |
| ( 2 ) | a | |||
| ( 3 ) | (пусто) | std:: forward < U > ( v ) |
U
|
|
| ( 4 ) | a | |||
| ( 5 ) | (пусто) | std:: forward < Args > ( args ) | ||
| ( 6 ) | a | |||
| ( 7 ) | (пусто) |
ilist,
std:: forward < Args > ( args ) |
||
| ( 8 ) | a | |||
| ( 9 ) | см. ниже |
*
other
(только если other владеет значением) |
тип объекта, которым владеет other | true только если other не содержит значения |
| ( 10 ) | a | |||
| ( 11 ) |
std
::
move
(
other.
alloc
)
|
принимает владение
(только если other владеет значением) |
||
| ( 12 ) | a | см. ниже | ||
alloc
инициализируется прямым несписочным образом с помощью
std::
allocator_traits
<
Allocator
>
::
select_on_container_copy_construction
(
other.
alloc
)
.
Ограничения и дополнительная информация
- std:: derived_from < std:: remove_cvref_t < U > , T >
- std:: is_copy_constructible_v < std:: remove_cvref_t < U >>
- std:: is_constructible_v < std:: remove_cvref_t < U > , /* argument types */ > , где /* argument types */ это:
U
Args...
- std:: is_same_v < std:: remove_cvref_t < U > , std :: polymorphic > равно false .
-
Uне является специализацией std::in_place_type_t .
Исключения
Ничего не выбрасывает, если только std:: allocator_traits < Allocator > :: allocate или std:: allocator_traits < Allocator > :: construct не выбрасывают исключение.
Пример
|
Этот раздел не завершён
Причина: отсутствует пример |
Смотрите также
|
(C++11)
|
тип-метка, используемый для выбора перегрузок конструкторов с поддержкой аллокаторов
(класс) |
|
метка для конструирования на месте
(метка) |