man annehmen, hat eine Funktion mit dem folgenden Prototypwird zweimal in einem einzigen vollen Ausdruck zu bewegen erlaubt
template<typename T>
std::unique_ptr<T> process_object(std::unique_ptr<T> ptr);
Die Funktion (eine verschobene Version), um das Objekt zurückgeben kann, die ihm übergeben wurde, oder eine ganz andere Objekt.
Ist es legal C++, diese Funktion wie folgt zu verwenden?
std::unique_ptr<Widget> pw(new Widget());
pw = process_object(std::move(pw));
Wenn ich mich richtig erinnere, gibt es eine C/C++ Regel, die in einem einzigen vollen Ausdruck ein Objekt mehr als einmal verbieten ändern. Gilt diese Regel hier? Wenn ja, gibt es eine Möglichkeit, dieses Idiom in einer einzigen Zeile anders auszudrücken?
Was passiert, wenn man std::unique_ptr
durch den verachteten std::auto_ptr
ersetzt?
Meintest du 'process_object' um ein' std :: unique_ptr && 'Argument zu nehmen? –
Walter
@Walter Warum würdest du das erwarten? Der Besitz eines 'unique_ptr' wird nach Wert übergeben. –
'auto_ptr' ist veraltet. – Walter