std::indirect<T, Allocator>:: operator=
From de.cppreference.net
|
constexpr
indirect
&
operator
=
(
const
indirect
&
other
)
;
|
(1) | (seit C++26) |
|
constexpr
indirect
&
operator
=
(
indirect
&&
other
)
noexcept
(
/* siehe unten */
)
;
|
(2) | (seit C++26) |
|
template
<
class
U
=
T
>
constexpr indirect & operator = ( U && value ) ; |
(3) | (seit C++26) |
Ersetzt den Inhalt von * this durch value oder den Inhalt von other .
Sei
traits
gleich
std::
allocator_traits
<
Allocator
>
:
1)
Wenn
std::
addressof
(
other
)
==
this
true
ist, tut nichts. Andernfalls sei
need_update
gleich
traits
::
propagate_on_container_copy_assignment
::
value
:
- Wenn other wertlos ist, wird * this wertlos und das von * this gehaltene Objekt (falls vorhanden) wird mittels traits :: destroy zerstört und anschließend der Speicher freigegeben.
-
Andernfalls, wenn
alloc== other.alloctrue ist und * this nicht wertlos ist, entspricht dies ** this = * other . - Andernfalls:
-
-
Konstruiert ein neues gehaltenes Objekt in
*
this
mittels
traits
::
construct
mit
*
other
als Argument, unter Verwendung des Allokators
update_alloc
?
other.
alloc:alloc. - Das zuvor in * this gehaltene Objekt (falls vorhanden) wird mittels traits :: destroy zerstört und anschließend der Speicher freigegeben.
-
pzeigt auf das neue gehaltene Objekt.
-
Konstruiert ein neues gehaltenes Objekt in
*
this
mittels
traits
::
construct
mit
*
other
als Argument, unter Verwendung des Allokators
update_alloc
?
other.
Nach dem Aktualisieren des Objekts, das im Besitz von
*
this
ist, falls
need_update
gleich
true
ist, wird
alloc
durch eine Kopie von
other.
alloc
ersetzt.
Wenn
std::
is_copy_assignable_v
<
T
>
&&
std::
is_copy_constructible_v
<
T
>
false
ist, ist das Programm fehlerhaft.
2)
Wenn
std::
addressof
(
other
)
==
this
true
ist, tut nichts. Andernfalls sei
need_update
gleich
traits
::
propagate_on_container_move_assignment
::
value
:
- Wenn other wertlos ist, wird * this wertlos und das von * this gehaltene Objekt (falls vorhanden) wird mittels traits :: destroy zerstört und anschließend der Speicher freigegeben.
-
Andernfalls, wenn
alloc== other.alloctrue ist, werden die gehaltenen Objekte in * this und other getauscht; das gehaltene Objekt in other (falls vorhanden) wird anschließend mittels traits :: destroy zerstört und der Speicher freigegeben. - Andernfalls:
-
-
Konstruiert ein neues gehaltenes Objekt in
*
this
mittels
traits
::
construct
mit
std
::
move
(
*
other
)
als Argument, unter Verwendung des Allokators
update_alloc
?
other.
alloc:alloc. - Das zuvor in * this gehaltene Objekt (falls vorhanden) wird mittels traits :: destroy zerstört und anschließend der Speicher freigegeben.
-
pzeigt auf das neue gehaltene Objekt.
-
Konstruiert ein neues gehaltenes Objekt in
*
this
mittels
traits
::
construct
mit
std
::
move
(
*
other
)
als Argument, unter Verwendung des Allokators
update_alloc
?
other.
Nach dem Aktualisieren der Objekte, die im Besitz von
*
this
und
other
sind, falls
need_update
den Wert
true
hat, wird
alloc
durch eine Kopie von
other.
alloc
ersetzt.
3)
Wenn
*
this
wertlos ist, dann konstruiert ein owned Objekt mit
std::
forward
<
U
>
(
value
)
unter Verwendung von
alloc
. Andernfalls äquivalent zu
**
this
=
std::
forward
<
U
>
(
value
)
.
Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn alle folgenden Bedingungen erfüllt sind:
- std:: is_same_v < std:: remove_cvref_t < U > , std :: indirect > ist false .
- std:: is_constructible_v < T, U > ist true .
- std:: is_assignable_v < T & , U > ist true .
Inhaltsverzeichnis |
Parameter
| other | - |
ein weiteres
indirect
Objekt, dessen besessener Wert (falls vorhanden) für die Zuweisung verwendet wird
|
| value | - | Wert, der dem besessenen Wert zugewiesen oder für dessen Konstruktion verwendet wird |
Rückgabewert
* this
Exceptions
1)
Wenn eine Exception ausgelöst wird, bleibt das Ergebnis von
this
-
>
valueless_after_move
(
)
unverändert.
Wenn während des Aufrufs des ausgewählten Kopierkonstruktors von
T
eine Exception ausgelöst wird, tritt keine Wirkung ein.
Wenn während des Aufrufs des Kopierzuweisungsoperators von
T
eine Exception ausgelöst wird, ist der Zustand von
this
-
>
p
durch die Exception-Safety-Garantie des Kopierzuweisungsoperators von
T
definiert.
2)
Wenn eine Ausnahme ausgelöst wird, gibt es keine Auswirkungen auf
*
this
oder
other
.
noexcept
Spezifikation:
noexcept
(
std::
allocator_traits
<
Allocator
>
::
propagate_on_container_move_assignment
::
value
Beispiel
|
Dieser Abschnitt ist unvollständig
Grund: Kein Beispiel |