std::polymorphic<T, Allocator>:: polymorphic
|
constexpr
explicit
polymorphic
(
)
;
|
(1) | (depuis C++26) |
|
constexpr
explicit
polymorphic
(
std::
allocator_arg_t
,
const
Allocator
&
a
)
;
|
(2) | (depuis C++26) |
|
template
<
class
U
=
T
>
constexpr explicit polymorphic ( U && v ) ; |
(3) | (depuis C++26) |
|
template
<
class
U
=
T
>
constexpr
explicit
polymorphic
(
std::
allocator_arg_t
,
const
Allocator
&
a,
|
(4) | (depuis C++26) |
|
template
<
class
U,
class
...
Args
>
constexpr explicit polymorphic ( std:: in_place_type_t < U > , Args && ... args ) ; |
(5) | (depuis C++26) |
|
template
<
class
U,
class
...
Args
>
constexpr
explicit
polymorphic
(
std::
allocator_arg_t
,
const
Allocator
&
a,
|
(6) | (depuis C++26) |
|
template
<
class
U,
class
I,
class
...
Args
>
constexpr
explicit
polymorphic
(
std::
in_place_type_t
<
U
>
,
|
(7) | (depuis C++26) |
|
template
<
class
U,
class
I,
class
...
Args
>
constexpr
explicit
polymorphic
(
std::
allocator_arg_t
,
const
Allocator
&
a,
|
(8) | (depuis C++26) |
|
constexpr
polymorphic
(
const
polymorphic
&
other
)
;
|
(9) | (depuis C++26) |
|
constexpr
polymorphic
(
std::
allocator_arg_t
,
const
Allocator
&
a,
const polymorphic & other ) ; |
(10) | (depuis C++26) |
|
constexpr
polymorphic
(
polymorphic
&&
other
)
noexcept
;
|
(11) | (depuis C++26) |
|
constexpr
polymorphic
(
std::
allocator_arg_t
,
const
Allocator
&
a,
polymorphic && other ) noexcept ( /* voir ci-dessous */ ) ; |
(12) | (depuis C++26) |
Construit un nouvel objet
polymorphic
.
Table des matières |
Paramètres
| a | - | l'allocateur à associer |
| v | - | valeur avec laquelle initialiser la valeur possédée |
| args | - | arguments avec lesquels initialiser la valeur possédée |
| il | - | liste d'initialisation avec laquelle initialiser la valeur possédée |
| other | - |
un autre objet
polymorphic
dont la valeur possédée (si elle existe) est copiée
|
Effets
La construction d'un nouvel objet
polymorphic
consiste en les étapes suivantes :
alloc
:
-
Si l'initialiseur pour
allocest vide, il est initialisé par valeur . -
Si l'initialiseur pour
allocn'est pas vide, il est initialisé directement non-liste avec l'argument d'initialisation.
-
Pour les surcharges
(
1-8
)
, appelle
std::
allocator_traits
<
Allocator
>
::
construct
(
alloc ,p, args... ) , où-
p
est un pointeur de type
U*, il pointe vers un espace de stockage adapté à la construction de l'objet possédé, et - args... est un pack d'expressions contenant les arguments d'initialisation.
-
p
est un pointeur de type
-
Pour les surcharges
(
9-12
)
:
- Si other est sans valeur, aucun objet possédé n'est construit, et * this est également sans valeur après la construction.
-
Sinon, si
other
est une référence rvalue et
allocest égal à other.alloc, * this prend possession de l'objet possédé par other . -
Sinon, l'objet possédé est construit en utilisant
alloccomme décrit ci-dessus, où le type de p est déterminé par le type de l'objet possédé par other .
| Surcharge | Initialiseur pour... | Type de l'objet possédé |
valueless_after_move()
après construction |
|
|---|---|---|---|---|
alloc
|
l'objet possédé | |||
| ( 1 ) | (vide) | (vide) |
T
|
false |
| ( 2 ) | a | |||
| ( 3 ) | (vide) | std:: forward < U > ( v ) |
U
|
|
| ( 4 ) | a | |||
| ( 5 ) | (vide) | std:: forward < Args > ( args ) | ||
| ( 6 ) | a | |||
| ( 7 ) | (vide) |
ilist,
std:: forward < Args > ( args ) |
||
| ( 8 ) | a | |||
| ( 9 ) | voir ci-dessous |
*
other
(seulement si other possède une valeur) |
le type de l'objet possédé par other | true seulement si other est sans valeur |
| ( 10 ) | a | |||
| ( 11 ) |
std
::
move
(
other.
alloc
)
|
prend possession
(seulement si other possède une valeur) |
||
| ( 12 ) | a | voir ci-dessous | ||
alloc
est initialisé par initialisation directe non-liste avec
std::
allocator_traits
<
Allocator
>
::
select_on_container_copy_construction
(
other.
alloc
)
.
Contraintes et informations supplémentaires
- 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 */ > , où /* argument types */ sont :
U
Args...
- std:: is_same_v < std:: remove_cvref_t < U > , std :: polymorphic > est false .
-
Un'est pas une spécialisation de std::in_place_type_t .
Exceptions
Ne lance rien sauf si std:: allocator_traits < Allocator > :: allocate ou std:: allocator_traits < Allocator > :: construct lance.
Exemple
|
Cette section est incomplète
Raison : aucun exemple |
Voir aussi
|
(C++11)
|
type de balise utilisé pour sélectionner les surcharges de constructeur prenant en compte l'allocateur
(classe) |
|
balise de construction en place
(balise) |