std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>:: construct
|
Definiert in Header
<scoped_allocator>
|
||
|
template
<
class
T,
class
...
Args
>
void construct ( T * p, Args && ... args ) ; |
(1) | |
|
template
<
class
T1,
class
T2,
class
...
Args1
,
class
...
Args2
>
void
konstruiere
(
std::
pair
<
T1, T2
>
*
p,
std::
piecewise_construct_t
,
|
(2) | (bis C++20) |
|
template
<
class
T1,
class
T2
>
void construct ( std:: pair < T1, T2 > * p ) ; |
(3) | (bis C++20) |
|
template
<
class
T1,
class
T2,
class
U,
class
V
>
void construct ( std:: pair < T1, T2 > * p, U && x, V && y ) ; |
(4) | (bis 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) | (bis C++20) |
|
template
<
class
T1,
class
T2,
class
U,
class
V
>
void construct ( std:: pair < T1, T2 > * p, std:: pair < U, V > && xy ) ; |
(6) | (bis C++20) |
|
Hilfsfunktions-Templates
|
||
|
template
<
class
T,
class
...
Args
>
std:: tuple < /* siehe unten */ > /*concat-args*/ ( std:: tuple < Args... > && tup ) ; |
(7) |
(
Nur zur Darstellung*
)
(bis C++20) |
Konstruiert ein Objekt im allokierten, aber nicht initialisierten Speicher, auf den p zeigt, unter Verwendung des äußeren Allokators und der bereitgestellten Konstruktorargumente. Wenn das Objekt von einem Typ ist, der selbst Allokatoren verwendet , oder wenn es sich um std::pair (bis C++20) handelt, wird der innere Allokator an das konstruierte Objekt weitergegeben.
T
by
Uses-Allocator-Konstruktion
at the uninitialized memory location indicated by
p
using the outermost allocator.
|
Gegeben std:: uses_allocator < T, inner_allocator_type > :: value als uses_inner :
Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn
|
(bis C++20) |
|
Entspricht
std::
apply
|
(seit C++20) |
concat-args
<
T1
>
(
std
::
move
(
x
)
)
,
yprime
gleich
concat-args
<
T2
>
(
std
::
move
(
y
)
)
, ruft
outermost-construct
(
p,
std::
piecewise_construct
, std
::
move
(
xprime
)
, std
::
move
(
yprime
)
)
auf.
std:: forward_as_tuple ( xarg ) , std:: forward_as_tuple ( yarg ) ) ; , wobei xarg und yarg wie folgt definiert sind:
| Überladung | 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
erforderlich sind.
- Wenn uses_inner gleich false ist und std:: is_constructible < T, Args... > :: value gleich true ist, gibt std:: tuple < Args && ... > ( std :: move ( tup ) ) zurück.
-
Andernfalls, wenn
uses_inner
und
std::
is_constructible
<
T,
std::
allocator_arg_t
,
inner_allocator_type & ,
Args... > :: value beide gleich true sind, gibt std:: tuple_cat ( std:: tuple < std:: allocator_arg_t , inner_allocator_type & >
( std:: allocator_arg , inner_allocator ( ) ) ,
std:: tuple < Args && ... > ( std :: move ( tup ) ) ) zurück. -
Andernfalls, wenn
uses_inner
und
std::
is_constructible
<
T, Args..., inner_allocator_type
&
>
::
value
beide gleich
true
sind, gibt
std::
tuple_cat
(
std::
tuple
<
Args
&&
...
>
(
std
::
move
(
tup
)
)
,
std:: tuple < inner_allocator_type & > ( inner_allocator ( ) ) zurück. - Andernfalls ist das Programm fehlerhaft.
Inhaltsverzeichnis |
Parameter
| p | - | Zeiger auf allokierten, aber nicht initialisierten Speicher |
| args | - |
die Konstruktorargumente, die an den Konstruktor von
T
übergeben werden
|
| x | - |
die Konstruktorargumente, die an den Konstruktor von
T1
übergeben werden
|
| y | - |
die Konstruktorargumente, die an den Konstruktor von
T2
übergeben werden
|
| xy | - |
das Paar, dessen zwei Mitglieder die Konstruktorargumente für
T1
und
T2
sind
|
| tup | - | die zusammenzuführenden Argumente |
Hinweise
Diese Funktion wird (über
std::allocator_traits
) von jedem allocator-aware Objekt aufgerufen, wie z.B.
std::vector
, dem ein
std::scoped_allocator_adaptor
als zu verwendender Allokator gegeben wurde. Da
inner_allocator_type
selbst eine Spezialisierung von
std::scoped_allocator_adaptor
ist, wird diese Funktion auch aufgerufen, wenn die durch diese Funktion konstruierten allocator-aware Objekte mit der Konstruktion ihrer eigenen Member beginnen.
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 2203 | C++11 |
innere Allokatoren wurden durch Wertinitialisierung
eines
inner_allocator_type
Objekts erhalten
|
erhalten durch Aufruf von
inner_allocator()
|
|
LWG 2511
( P0475R1 ) |
C++11 |
concat-args
könnte Elemente von
std::tuple
kopieren
|
eliminierte alle Elementkopiervorgänge |
| LWG 2586 | C++11 |
nur Konstruktionen aus
inner_allocator_type
Rvalues wurden geprüft
|
prüft stattdessen Konstruktionen aus nicht-konstanten
inner_allocator_type
Lvalues
|
| LWG 2975 | C++11 | Überladung (1) war nicht eingeschränkt | eingeschränkt um std::pair abzulehnen |
Siehe auch
|
[static]
|
Konstruiert ein Objekt im allozierten Speicher
(Funktions-Template) |
|
(bis C++20)
|
Konstruiert ein Objekt im allozierten Speicher
(Öffentliche Elementfunktion von
std::allocator<T>
)
|