std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>:: construct
|
Definido en el encabezado
<scoped_allocator>
|
||
|
template
<
class
T,
class
...
Args
>
void construct ( T * p, Args && ... args ) ; |
(1) | |
|
template
<
class
T1,
class
T2,
class
...
Args1
,
class
...
Args2
>
void
construct
(
std::
pair
<
T1, T2
>
*
p,
std::
piecewise_construct_t
,
|
(2) | (hasta C++20) |
|
template
<
class
T1,
class
T2
>
void construct ( std:: pair < T1, T2 > * p ) ; |
(3) | (hasta C++20) |
|
template
<
class
T1,
class
T2,
class
U,
class
V
>
void construct ( std:: pair < T1, T2 > * p, U && x, V && y ) ; |
(4) | (hasta C++20) |
|
template
<
class
T1,
class
T2,
class
U,
class
V
>
void construct ( std:: pair < T1, T2 > * p, const std:: pair < U, V > & xy ) ; |
(5) | (hasta C++20) |
|
template
<
class
T1,
class
T2,
class
U,
class
V
>
void construct ( std:: pair < T1, T2 > * p, std:: pair < U, V > && xy ) ; |
(6) | (hasta C++20) |
|
Plantillas de funciones auxiliares
|
||
|
template
<
class
T,
class
...
Args
>
std:: tuple < /* ver abajo */ > /*concat-args*/ ( std:: tuple < Args... > && tup ) ; |
(7) |
(
solo para exposición*
)
(hasta C++20) |
Construye un objeto en almacenamiento asignado pero no inicializado apuntado por p usando el asignador externo y los argumentos de constructor proporcionados. Si el objeto es de un tipo que a su vez usa asignadores , o si es std::pair (until C++20) , pasa el asignador interno al objeto construido.
T
by
construcción uses-allocator
at the uninitialized memory location indicated by
p
using the outermost allocator.
|
Dado std:: uses_allocator < T, inner_allocator_type > :: value como uses_inner :
Esta sobrecarga participa en la resolución de sobrecarga solo si
|
(hasta C++20) |
|
Equivalente a
std::
apply
|
(desde C++20) |
concat-args
<
T1
>
(
std
::
move
(
x
)
)
,
yprime
igual a
concat-args
<
T2
>
(
std
::
move
(
y
)
)
, llama a
outermost-construct
(
p,
std::
piecewise_construct
, std
::
move
(
xprime
)
, std
::
move
(
yprime
)
)
.
std:: forward_as_tuple ( xarg ) , std:: forward_as_tuple ( yarg ) ) ; , donde xarg y yarg se definen de la siguiente manera:
| Sobrecarga | xarg | yarg |
|---|---|---|
| (4) | std:: forward < U > ( x ) | std:: forward < V > ( y ) |
| (5) | xy. first | xy. second |
| (6) | std:: forward < U > ( xy. first ) | std:: forward < V > ( xy. second ) |
T
.
- Si uses_inner es false y std:: is_constructible < T, Args... > :: value es true , retorna std:: tuple < Args && ... > ( std :: move ( tup ) ) .
-
De lo contrario, si
uses_inner
y
std::
is_constructible
<
T,
std::
allocator_arg_t
,
inner_allocator_type & ,
Args... > :: value son ambos true , retorna std:: tuple_cat ( std:: tuple < std:: allocator_arg_t , inner_allocator_type & >
( std:: allocator_arg , inner_allocator ( ) ) ,
std:: tuple < Args && ... > ( std :: move ( tup ) ) ) . -
De lo contrario, si
uses_inner
y
std::
is_constructible
<
T, Args..., inner_allocator_type
&
>
::
value
son ambos
true
, retorna
std::
tuple_cat
(
std::
tuple
<
Args
&&
...
>
(
std
::
move
(
tup
)
)
,
std:: tuple < inner_allocator_type & > ( inner_allocator ( ) ) . - De lo contrario, el programa está mal formado.
Contenidos |
Parámetros
| p | - | puntero a almacenamiento asignado pero no inicializado |
| args | - |
los argumentos del constructor que se pasarán al constructor de
T
|
| x | - |
los argumentos del constructor que se pasarán al constructor de
T1
|
| y | - |
los argumentos del constructor que se pasarán al constructor de
T2
|
| xy | - |
el par cuyos dos miembros son los argumentos del constructor para
T1
y
T2
|
| tup | - | los argumentos que se van a combinar |
Notas
Esta función es llamada (a través de
std::allocator_traits
) por cualquier objeto consciente del asignador, como
std::vector
, al que se le haya proporcionado un
std::scoped_allocator_adaptor
como asignador a utilizar. Dado que
inner_allocator_type
es en sí mismo una especialización de
std::scoped_allocator_adaptor
, esta función también será llamada cuando los objetos conscientes del asignador construidos a través de esta función comiencen a construir sus propios miembros.
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 2203 | C++11 |
los asignadores internos se obtenían mediante inicialización por valor
de un objeto
inner_allocator_type
|
obtenidos llamando a
inner_allocator()
|
|
LWG 2511
( P0475R1 ) |
C++11 |
concat-args
podría copiar elementos de
std::tuple
s
|
eliminó todas las operaciones de copia de elementos |
| LWG 2586 | C++11 |
solo se verificaban las construcciones desde
inner_allocator_type
rvalues
|
verifica construcciones desde
inner_allocator_type
lvalues no constantes en su lugar
|
| LWG 2975 | C++11 | la sobrecarga (1) no estaba restringida | restringida para rechazar std::pair |
Véase también
|
[static]
|
construye un objeto en el almacenamiento asignado
(plantilla de función) |
|
(until C++20)
|
construye un objeto en almacenamiento asignado
(función miembro pública de
std::allocator<T>
)
|