std::polymorphic<T, Allocator>:: operator=
From cppreference.net
<
cpp
|
memory
|
polymorphic
|
constexpr
polymorphic
&
operator
=
(
const
polymorphic
&
other
)
;
|
(1) | (seit C++26) |
|
constexpr
polymorphic
&
operator
=
(
polymorphic
&&
other
)
noexcept ( /* siehe unten */ ) ; |
(2) | (seit C++26) |
Ersetzt den Inhalt von * this durch den Inhalt von other .
Sei
traits
gleich
std::
allocator_traits
<
Allocator
>
:
1)
Falls
std::
addressof
(
other
)
==
this
true
ist, wird nichts unternommen. Andernfalls sei
need_update
gleich
traits
::
propagate_on_container_copy_assignment
::
value
:
-
Falls
other
wertlos ist, wird mit dem nächsten Schritt fortgefahren. Andernfalls wird ein neues besessenes Objekt in
*
this
unter Verwendung von
traits
::
construct
mit
*
other
als Argument konstruiert, wobei der Allokator
update_alloc
?
other.
alloc:allocverwendet wird. - Das zuvor besessene Objekt in * this (falls vorhanden) wird unter Verwendung von traits :: destroy zerstört und anschließend der Speicher freigegeben.
Nach dem Aktualisieren des Objekts, das im Besitz von
*
this
ist, falls
need_update
den Wert
true
hat, wird
alloc
durch eine Kopie von
other.
alloc
ersetzt.
2)
Wenn
std::
addressof
(
other
)
==
this
true
ist, tut nichts. Andernfalls sei
need_update
gleich
traits
::
propagate_on_container_move_assignment
::
value
:
-
Wenn
alloc== other.alloctrue ist, tauscht die besessenen Objekte in * this und other ; das besessene Objekt in other (falls vorhanden) wird dann unter Verwendung von traits :: destroy zerstört und anschließend der Speicher freigegeben. - Andernfalls:
-
-
Wenn
other
wertlos ist, fahre mit dem nächsten Schritt fort. Andernfalls konstruiere ein neues besessenes Objekt in
*
this
unter Verwendung von
traits
::
construct
mit
std
::
move
(
*
other
)
als Argument, unter Verwendung des Allokators
update_alloc
?
other.
alloc:alloc. - Das zuvor besessene Objekt in * this (falls vorhanden) wird unter Verwendung von traits :: destroy zerstört und anschließend der Speicher freigegeben.
-
Wenn
other
wertlos ist, fahre mit dem nächsten Schritt fort. Andernfalls konstruiere ein neues besessenes Objekt in
*
this
unter Verwendung von
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.
Wenn alle folgenden Bedingungen erfüllt sind, ist das Programm fehlerhaft:
- std:: allocator_traits < Allocator > :: is_always_equal :: value ist false .
-
Tist ein unvollständiger Typ.
Inhaltsverzeichnis |
Parameter
| other | - |
ein weiteres
polymorphic
Objekt, dessen besessener Wert (falls vorhanden) für die Zuweisung verwendet wird
|
Rückgabewert
* this
Exceptions
1)
Wenn eine Ausnahme ausgelöst wird, hat dies keine Auswirkungen auf
*
this
.
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 |