Heim >Backend-Entwicklung >C++ >Warum kann ich ein „std::unique_ptr' ohne „std::move' zurückgeben?
Warum die Rückgabe eines std::unique_ptr ohne std::move zulässig ist
Obwohl std::unique_ptr die Kopierkonstruktion verbietet, sind Rückgabeanweisungen mit unique_ptrs sind ausgenommen. Dieses Verhalten steht im Einklang mit der C-Sprachspezifikation, insbesondere den Abschnitten 12.8 §34 und §35.
Wenn bestimmte Bedingungen erfüllt sind, können Implementierungen die Kopier-/Verschiebungskonstruktion für Klassenobjekte weglassen. Diese als Kopierelision bezeichnete Optimierung ist in Rückgabeanweisungen für Klassenrückgabetypen innerhalb von Funktionen zulässig. Die Ausnahme gilt für Ausdrücke, an denen ein nichtflüchtiges automatisches Objekt beteiligt ist, dessen Typ mit dem Funktionsrückgabetyp übereinstimmt.
Darüber hinaus erfolgt die Überladungsauflösung für den Kopierkonstruktor bei einer Kopierelision für ein L-Wert-Objekt so, als ob das Objekt angegeben wäre durch einen R-Wert.
Compiler-Implementierung
Diese Ausnahme wird innerhalb der behandelt Compiler. Compiler nutzen Sprachspezifikationen, um Elisionstechniken zu erkennen und anzuwenden und so den Code zu optimieren, indem sie unnötige Vorgänge eliminieren.
Benannte Wertrückgabe
Es ist bemerkenswert, dass die Rückgabe nach Wert die optimale Option ist solche Szenarien. Auch ohne Elision werden benannte Werte in Rückgabeanweisungen als R-Werte behandelt, was nur minimalen Overhead verursacht.
Das obige ist der detaillierte Inhalt vonWarum kann ich ein „std::unique_ptr' ohne „std::move' zurückgeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!