Namespaces
Variants

std::indirect<T, Allocator>:: indirect

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 indirect ( ) ;
(1) (depuis C++26)
constexpr explicit indirect ( std:: allocator_arg_t , const Allocator & a ) ;
(2) (depuis C++26)
template < class U = T >
constexpr explicit indirect ( U && v ) ;
(3) (depuis C++26)
template < class U = T >

constexpr explicit indirect ( std:: allocator_arg_t , const Allocator & a,

U && v ) ;
(4) (depuis C++26)
template < class ... Args >
constexpr explicit indirect ( std:: in_place_t , Args && ... args ) ;
(5) (depuis C++26)
template < class ... Args >

constexpr explicit indirect ( std:: allocator_arg_t , const Allocator & a,

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

constexpr explicit indirect ( std:: in_place_t , std:: initializer_list < I > ilist,

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

constexpr explicit indirect ( std:: allocator_arg_t , const Allocator & a,
std:: in_place_t , std:: initializer_list < I > ilist,

Args && ... args ) ;
(8) (depuis C++26)
constexpr indirect ( const indirect & other ) ;
(9) (depuis C++26)
constexpr indirect ( std:: allocator_arg_t , const Allocator & a,
const indirect & other ) ;
(10) (depuis C++26)
constexpr indirect ( indirect && other ) noexcept ;
(11) (depuis C++26)
constexpr indirect ( std:: allocator_arg_t , const Allocator & a,
indirect && other ) noexcept ( /* voir ci-dessous */ ) ;
(12) (depuis C++26)

Construit un nouvel objet indirect .

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 indirect dont la valeur possédée (si elle existe) est copiée

Effets

La construction d'un nouvel objet indirect consiste en les étapes suivantes :

1) Construit l'allocateur associé alloc :
2) Construit l'objet possédé :
  • Pour les surcharges ( 1-8 ) , initialise p avec le résultat de l'appel à std:: allocator_traits < Allocator > :: allocate , puis appelle std:: allocator_traits < Allocator > :: construct ( alloc  , p  , args... ) , où 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é de other .
    • Sinon, l'objet possédé est construit en utilisant alloc comme décrit ci-dessus.
Surcharge Initialiseur pour... valueless_after_move()
après construction
alloc l'objet possédé
( 1 ) (vide) (vide) false
( 2 ) a
( 3 ) (vide) std:: forward < U > ( v )
( 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)
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 std:: is_default_constructible_v < T > est false , le programme est mal formé.

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

3-8) Ces surcharges participent à la résolution de surcharge seulement si std:: is_constructible_v < T, /* argument types */ > est true , où /* argument types */ sont :
3,4) U
5,6) Args...
7,8) std:: initializer_list < I > & , Args...

3,5,7) Ces surcharges participent à la résolution de surcharge uniquement si std:: is_default_constructible_v < Allocator > est true .
3,4) Ces surcharges participent à la résolution de surcharge uniquement si les valeurs suivantes sont toutes false :

9,10) Si std:: is_copy_constructible_v < T > est false , le programme est mal formé.
11,12) Lorsque la construction est terminée, other est sans valeur.
12) Si std:: allocator_traits < Allocator > :: is_always_equal :: value est false et T est un type incomplet , le programme est mal formé.

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)