Namespaces
Variants

std::polymorphic<T, Allocator>:: polymorphic

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
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,

U && v ) ;
(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,

std:: in_place_type_t < U > , Args && ... args ) ;
(6) (depuis C++26)
template < class U, class I, class ... Args >

constexpr explicit polymorphic ( std:: in_place_type_t < U > ,
std:: initializer_list < I > ilist,

Args && ... args ) ;
(7) (depuis C++26)
template < class U, class I, class ... Args >

constexpr explicit polymorphic ( std:: allocator_arg_t , const Allocator & a,
std:: in_place_type_t < U > ,
std:: initializer_list < I > ilist,

Args && ... args ) ;
(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 :

1) Construit l'allocateur associé alloc :
2) Construit l'objet possédé :
  • 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.
  • 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 alloc est égal à other. alloc , * this prend possession de l'objet possédé par other .
    • Sinon, l'objet possédé est construit en utilisant alloc comme 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
9) alloc est initialisé par initialisation directe non-liste avec std:: allocator_traits < Allocator > ::
select_on_container_copy_construction ( other. alloc  )
.
12) L'objet détenu est construit comme suit :
  • Si other n'a pas de valeur, * this n'a également pas de valeur.
  • Sinon, si alloc == other. alloc est true , * this prend possession de l'objet détenu par other .
  • Sinon, construit un objet détenu avec * std :: move ( other ) en utilisant alloc .

Contraintes et informations supplémentaires

1,2) Si l'une des valeurs suivantes est false , le programme est mal formé :

1) Cette surcharge participe à la résolution de surcharge seulement si std:: is_default_constructible_v < Allocator > est true .

3-8) Ces surcharges participent à la résolution de surcharge uniquement si les valeurs suivantes sont toutes true :
3,4) U
5,6) Args...
7,8) std:: initializer_list < I > & , Args...

3,5,7) Ces surcharges participent à la résolution de surcharge seulement si std:: is_default_constructible_v < Allocator > est true .
3,4) Ces surcharges participent à la résolution de surcharge seulement si toutes les conditions suivantes sont satisfaites :
5-8) Ces surcharges participent à la résolution de surcharge seulement si std:: is_same_v < std:: remove_cvref_t < U > , U > est true .

Exceptions

Ne lance rien sauf si std:: allocator_traits < Allocator > :: allocate ou std:: allocator_traits < Allocator > :: construct lance.

12)
noexcept spécification :
noexcept ( std:: allocator_traits < Allocator > :: is_always_equal :: value )

Exemple

Voir aussi

type de balise utilisé pour sélectionner les surcharges de constructeur prenant en compte l'allocateur
(classe)
balise de construction en place
(balise)