Nel C ++ tradizionale, passare per valore in funzioni e metodi è lento per oggetti di grandi dimensioni e generalmente non viene visto. Invece, i programmatori C ++ tendono a passare i riferimenti in giro, che è più veloce, ma che introduce ogni sorta di domande complicate sulla proprietà e in particolare sulla gestione della memoria (nel caso in cui l'oggetto sia allocato in heap)
Ora, in C ++ 11, abbiamo riferimenti a Rvalue e spostiamo i costruttori, il che significa che è possibile implementare un oggetto di grandi dimensioni (come un std::vector
) che è economico per passare da un valore all'altro in una funzione.
Quindi, ciò significa che il valore predefinito dovrebbe essere passare per valore per istanze di tipi come std::vector
e std::string
? Che dire di oggetti personalizzati? Qual è la nuova migliore pratica?
const std::string&
e non una copia. Il primo thread è quindi uscito ...
pass by reference ... which introduces all sorts of complicated questions around ownership and especially around memory management (in the event that the object is heap-allocated)
. Non capisco come sia complicato o problematico per la proprietà? Potrei essermi perso qualcosa?