Namensräume
Varianten
Aktionen

std::basic_stacktrace<Allocator>:operator=

Von cppreference.com
 
 
 
 
basic_stacktrace& operator=( const basic_stacktrace& other );
(1) (seit C++23)
basic_stacktrace& operator=( basic_stacktrace&& other )
    noexcept(/* siehe unten */);
(2) (seit C++23)

Ersetzt den Inhalt von basic_stacktrace.

1) Kopierzuweisungsoperator. Ersetzt den Inhalt durch eine Kopie des Inhalts von other.
Wenn std::allocator_traits<allocator_type>::propagate_on_container_copy_assignment::value true ist, wird der Allokator von *this durch eine Kopie des Allokators von other ersetzt. Wenn der Allokator von *this nach der Zuweisung ungleich dem alten Wert ist, wird der alte Allokator verwendet, um den Speicher freizugeben, und dann wird der neue Allokator verwendet, um ihn zuzuweisen, bevor die Einträge kopiert werden. Andernfalls kann der von *this gehaltene Speicher, wenn möglich, wiederverwendet werden.
2) Move-Zuweisungsoperator. Ersetzt den Inhalt durch den Inhalt von other unter Verwendung von Move-Semantik (d. h. die Daten in other werden von other nach *this verschoben). other befindet sich danach in einem gültigen, aber undefinierten Zustand.
Wenn std::allocator_traits<allocator_type>::propagate_on_container_move_assignment::value true ist, wird der Allokator von *this durch eine Kopie des Allokators von other ersetzt. Wenn er false ist und die Allokatoren von *this und other nicht gleich sind, kann *this den von other gehaltenen Speicher nicht übernehmen und muss jeden Eintrag einzeln zuweisen, wobei bei Bedarf zusätzlicher Speicher mit dem eigenen Allokator zugewiesen wird.

In jedem Fall können die ursprünglichen Stacktrace-Einträge von *this entweder zerstört oder durch elementweise Zuweisung ersetzt werden.

*this kann bei fehlgeschlagener Zuweisung leer gesetzt werden, wenn die Implementierung die Exception-Spezifikation verschärft.

Inhalt

[edit] Parameter

Sonstiges - ein weiterer basic_stacktrace, der als Quelle verwendet wird

[edit] Rückgabewert

*this

[edit] Komplexität

1) Linear zur Größe von *this und other.
2) Linear zur Größe von *this, es sei denn, die Allokatoren sind nicht gleich und propagieren nicht, in diesem Fall linear zur Größe von *this und other.

[edit] Exceptions

1) Kann implementierungsabhängige Ausnahmen auslösen.
2)
noexcept-Spezifikation:  
noexcept(std::allocator_traits<Allocator>::propagate_on_container_move_assignment::value
|| std::allocator_traits<Allocator>::is_always_equal::value)

[edit] Hinweise

Nach der Container-Move-Zuweisung (Überladung (2)), es sei denn, die elementweise Move-Zuweisung wird durch inkompatible Allokatoren erzwungen, bleiben Referenzen, Zeiger und Iteratoren (außer dem End-Iterator) zu other gültig, verweisen aber auf Elemente, die sich jetzt in *this befinden. Der aktuelle Standard macht diese Garantie durch die allgemeine Aussage in [container.reqmts]/67 und eine direktere Garantie wird durch LWG issue 2321 in Betracht gezogen.

[edit] Beispiel

[edit] Siehe auch

erstellt einen neuen basic_stacktrace
(public member function) [edit]