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

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

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

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

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

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

Args && ... args ) ;
(7) (desde 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) (desde C++26)
constexpr indirect ( const indirect & other ) ;
(9) (desde C++26)
constexpr indirect ( std:: allocator_arg_t , const Allocator & a,
const indirect & other ) ;
(10) (desde C++26)
constexpr indirect ( indirect && other ) noexcept ;
(11) (desde C++26)
constexpr indirect ( std:: allocator_arg_t , const Allocator & a,
indirect && other ) noexcept ( /* ver más abajo */ ) ;
(12) (desde C++26)

Construye un nuevo indirect 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 indirect cuyo valor poseído (si existe) es copiado

Efectos

La construcción de un nuevo objeto indirect consiste en los siguientes pasos:

1) Construye el asignador asociado alloc :
2) Construye el objeto poseído:
  • Para las sobrecargas ( 1-8 ) , inicializa p con el resultado de llamar a std:: allocator_traits < Allocator > :: allocate , luego llama a std:: allocator_traits < Allocator > :: construct ( alloc  , p  , args... ) , donde args... es un paquete de expresiones que contiene los argumentos del inicializador.
  • Para las sobrecargas ( 9-12 ) :
    • Si other no tiene valor, no se construye ningún objeto poseído, y * this tampoco tiene valor después de la construcción.
    • En caso contrario, si other es una referencia a valor-R y alloc es igual a other. alloc , * this toma posesión del objeto poseído de other .
    • En caso contrario, el objeto poseído se construye usando alloc como se describe anteriormente.
Sobrecarga Inicializador para... valueless_after_move()
después de la construcción
alloc el objeto poseído
( 1 ) (vacío) (vacío) false
( 2 ) a
( 3 ) (vacío) std:: forward < U > ( v )
( 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)
true solo si other no tiene valor
( 10 ) a
( 11 ) std :: move ( other. alloc  ) toma posesión
(solo si other posee un valor)
( 12 ) a ver abajo
9) alloc se inicializa mediante inicialización directa-no-de-lista con std:: allocator_traits < Allocator > ::
select_on_container_copy_construction ( other. alloc  )
.
12) El objeto poseído se construye de la siguiente manera:
  • Si other no tiene valor, * this tampoco tiene valor.
  • En caso contrario, si alloc == other. alloc es true , * this toma posesión del objeto poseído de other .
  • En caso contrario, construye un objeto poseído con * std :: move ( other ) usando alloc .

Restricciones e información complementaria

1,2) Si std:: is_default_constructible_v < T > es false , el programa está mal formado.

1) Esta sobrecarga participa en la resolución de sobrecarga solo si std:: is_default_constructible_v < Allocator > es true .

3-8) Estas sobrecargas participan en la resolución de sobrecarga solo si std:: is_constructible_v < T, /* argument types */ > es true , donde /* argument types */ son:
3,4) U
5,6) Args...
7,8) std:: initializer_list < I > & , Args...

3,5,7) Estas sobrecargas participan en la resolución de sobrecarga solo si std:: is_default_constructible_v < Allocator > es true .
3,4) Estas sobrecargas participan en la resolución de sobrecarga solo si todos los siguientes valores son false :

9,10) Si std:: is_copy_constructible_v < T > es false , el programa está mal formado.
11,12) Cuando la construcción se completa, other carece de valor.
12) Si std:: allocator_traits < Allocator > :: is_always_equal :: value es false y T es un tipo incompleto , el programa está mal formado.

Excepciones

No lanza nada a menos que std:: allocator_traits < Allocator > :: allocate o std:: allocator_traits < Allocator > :: construct lancen.

12)
noexcept especificación:
noexcept ( std:: allocator_traits < Allocator > :: is_always_equal :: value )

Ejemplo

Véase también

tipo de etiqueta utilizado para seleccionar sobrecargas de constructores conscientes del asignador
(clase)
etiqueta de construcción in situ
(etiqueta)