exception-safe

___ answer2620426 ___

Natürlich ist nicht jeder Typ move-fähig und C ++ 0x erlaubt sogar das Werfen von Move-Konstruktoren. Solange das Konstruieren des Objekts aus einem R-Wert es werfen kann, kann es nicht ausnahmesicher sein. Die Verschiebungssemantik ermöglicht Ihnen jedoch, viele Typen zu haben, die bei einer rvalue-Quelle nicht zusammengebaut werden können.

Eine bedingte Unterstützung dafür könnte mit SFINAE erfolgen. Aber auch ohne eine solche bedingte Memberfunktion hält dich nichts davon ab zu schreiben:

%Vor%

was die starke Ausnahme garantiert, selbst wenn Ihr Move-Konstruktor keine starke Garantie gibt.

    
___ qstntxt ___

In einer Antwort auf eine Frage zu %code% behauptete ich dass der Grund %code% den Wert aus Gründen der Ausnahmesicherheit nicht zurückgibt (was passiert, wenn der Kopierkonstruktor eingibt).

@Konrad kommentierte, dass dies jetzt mit der Bewegungssemantik nicht mehr relevant ist. Ist das wahr?

AFAIK, Konstrukteure bewegen kann %code% , aber vielleicht mit %code% kann es immer noch erreicht werden.

Für Bonuspunkte, welche Fadensicherheitsgarantien kann dieser Vorgang liefern?

    
___ tag123exceptionssafe ___ hilf uns dieses Wiki zu bearbeiten ___ qstnhdr ___ Kann ein Stapel eine sichere Ausnahmemethode zum Zurückgeben und Entfernen des obersten Elements mit Verschiebungssemantik haben? ___ tag123c11 ___ C ++ 11 ist eine 2011 verabschiedete Version des C ++ - Sprachstandards. Sie hat viele Änderungen und Ergänzungen in der Kernsprache sowie der verbesserten und erweiterten C ++ - Standardbibliothek vorgenommen. ___ answer2620475 ___

Was die Bonusfrage betrifft, würde das keine Thread-Sicherheit bieten. Beachten Sie, dass als Beispiel die meisten Implementierungen von %code% drei Datenelemente haben (Zeiger auf den Anfang des Speichers, Zeiger eins hinter dem Ende der verwendeten Daten, Zeiger eins hinter dem Ende des zugewiesenen Speichers). Mit der Verschiebungssemantik können Sie den Inhalt des Vektors verschieben , ohne Werte neu zuweisen und kopieren zu müssen. Dies hat jedoch nichts mit der Thread-Sicherheit zu tun. Sie müssten threadsichere Konstrukte verwenden, um die Struktur threadsicher zu machen (da moving nicht unbedingt atomare bedeutet)

    
___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ tag123movesemantics ___ Move semantics ist eine Programmiersprachenfunktion, die es ermöglicht, einen Kopiervorgang durch einen effizienteren "move" zu ersetzen, wenn das Quellobjekt ein temporäres oder ein anderweitig ablaufendes Objekt ist. ___
2
Antworten

Kann ein Stapel eine sichere Ausnahmemethode zum Zurückgeben und Entfernen des obersten Elements mit Verschiebungssemantik haben?

In einer Antwort auf eine Frage zu std::stack::pop() behauptete ich dass der Grund pop den Wert aus Gründen der Ausnahmesicherheit nicht zurückgibt (was passiert, wenn der Kopierkonstruktor eingibt). @Konrad kommentierte, dass dies...
12.04.2010, 06:58