Si supponga una ha una funzione con il seguente prototiposi muove due volte in una sola espressione piena ammessi
template<typename T>
std::unique_ptr<T> process_object(std::unique_ptr<T> ptr);
La funzione può restituire (una versione spostato di) dell'oggetto che è stato passato ad esso, o una completamente diversa oggetto.
È legale C++ utilizzare questa funzione come segue?
std::unique_ptr<Widget> pw(new Widget());
pw = process_object(std::move(pw));
Se ricordo bene, c'è una regola C/C++ che proibisce modifica di un oggetto più di una volta in una singola espressione completa. Questa regola si applica qui? Se sì, c'è un modo per esprimere questo idioma in modo diverso in una singola riga?
Cosa succede se si sostituisce dal disprezzato std::auto_ptr
?
Intendevi 'process_object' per prendere un argomento' std :: unique_ptr && '? –
Walter
@Walter Perché te lo aspetti? Il passaggio della proprietà di un 'unique_ptr' è fatto in base al valore. –
'auto_ptr' è deprecato. – Walter