std::polymorphic<T, Allocator>:: polymorphic
|
constexpr
explicit
polymorphic
(
)
;
|
(1) | (desde C++26) |
|
constexpr
explicit
polymorphic
(
std::
allocator_arg_t
,
const
Allocator
&
a
)
;
|
(2) | (desde C++26) |
|
template
<
class
U
=
T
>
constexpr explicit polymorphic ( U && v ) ; |
(3) | (desde C++26) |
|
template
<
class
U
=
T
>
constexpr
explicit
polymorphic
(
std::
allocator_arg_t
,
const
Allocator
&
a,
|
(4) | (desde C++26) |
|
template
<
class
U,
class
...
Args
>
constexpr explicit polymorphic ( std:: in_place_type_t < U > , Args && ... args ) ; |
(5) | (desde C++26) |
|
template
<
class
U,
class
...
Args
>
constexpr
explicit
polymorphic
(
std::
allocator_arg_t
,
const
Allocator
&
a,
|
(6) | (desde C++26) |
|
template
<
class
U,
class
I,
class
...
Args
>
constexpr
explicit
polymorphic
(
std::
in_place_type_t
<
U
>
,
|
(7) | (desde C++26) |
|
template
<
class
U,
class
I,
class
...
Args
>
constexpr
explicit
polymorphic
(
std::
allocator_arg_t
,
const
Allocator
&
a,
|
(8) | (desde C++26) |
|
constexpr
polymorphic
(
const
polymorphic
&
other
)
;
|
(9) | (desde C++26) |
|
constexpr
polymorphic
(
std::
allocator_arg_t
,
const
Allocator
&
a,
const polymorphic & other ) ; |
(10) | (desde C++26) |
|
constexpr
polymorphic
(
polymorphic
&&
other
)
noexcept
;
|
(11) | (desde C++26) |
|
constexpr
polymorphic
(
std::
allocator_arg_t
,
const
Allocator
&
a,
polymorphic && other ) noexcept ( /* ver más abajo */ ) ; |
(12) | (desde C++26) |
Construye un nuevo
polymorphic
objeto.
Contenidos |
Parámetros
| a | - | el asignador a asociar |
| v | - | valor con el cual inicializar el valor poseído |
| args | - | argumentos con los cuales inicializar el valor poseído |
| il | - | lista de inicialización con la cual inicializar el valor poseído |
| other | - |
otro objeto
polymorphic
cuyo valor poseído (si existe) es copiado
|
Efectos
La construcción de un nuevo
polymorphic
objeto consiste en los siguientes pasos:
alloc
:
-
Si el inicializador para
allocestá vacío, se inicializa por valor . -
Si el inicializador para
allocno está vacío, se inicializa-directamente-no-por-lista con el argumento inicializador.
-
Para las sobrecargas
(
1-8
)
, llama a
std::
allocator_traits
<
Allocator
>
::
construct
(
alloc ,p, args... ) , donde-
p
es un puntero de tipo
U*, apunta al almacenamiento adecuado para construir el objeto poseído, y - args... es un paquete de expresiones que contiene los argumentos de inicialización.
-
p
es un puntero de tipo
-
Para las sobrecargas
(
9-12
)
:
- Si other no tiene valor, no se construye ningún objeto poseído, y * this tampoco tendrá valor después de la construcción.
-
De lo contrario, si
other
es una referencia a valor del lado derecho y
alloces igual a other.alloc, * this toma posesión del objeto poseído de other . -
De lo contrario, el objeto poseído se construye usando
alloccomo se describió anteriormente, donde el tipo de p está determinado por el tipo del objeto poseído por other .
| Sobrecarga | Inicializador para... | Tipo del objeto poseído |
valueless_after_move()
después de la construcción |
|
|---|---|---|---|---|
alloc
|
el objeto poseído | |||
| ( 1 ) | (vacío) | (vacío) |
T
|
false |
| ( 2 ) | a | |||
| ( 3 ) | (vacío) | std:: forward < U > ( v ) |
U
|
|
| ( 4 ) | a | |||
| ( 5 ) | (vacío) | std:: forward < Args > ( args ) | ||
| ( 6 ) | a | |||
| ( 7 ) | (vacío) |
ilist,
std:: forward < Args > ( args ) |
||
| ( 8 ) | a | |||
| ( 9 ) | ver abajo |
*
other
(solo si other posee un valor) |
el tipo del objeto poseído por other | true solo si other no posee valor |
| ( 10 ) | a | |||
| ( 11 ) |
std
::
move
(
other.
alloc
)
|
toma posesión
(solo si other posee un valor) |
||
| ( 12 ) | a | ver abajo | ||
alloc
se inicializa mediante inicialización directa-no-de-lista con
std::
allocator_traits
<
Allocator
>
::
select_on_container_copy_construction
(
other.
alloc
)
.
Restricciones e información complementaria
- 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 */ > , donde /* argument types */ son:
U
Args...
- std:: is_same_v < std:: remove_cvref_t < U > , std :: polymorphic > es false .
-
Uno es una especialización de std::in_place_type_t .
Excepciones
No lanza nada a menos que std:: allocator_traits < Allocator > :: allocate o std:: allocator_traits < Allocator > :: construct lancen.
Ejemplo
|
Esta sección está incompleta
Razón: sin ejemplo |
Véase también
|
(C++11)
|
tipo de etiqueta utilizado para seleccionar sobrecargas de constructores conscientes del asignador
(clase) |
|
etiqueta de construcción in situ
(etiqueta) |