Chiama a getText() crea un valore r che viene copiato nella variabile newText.
Potrebbe creare un temporaneo; ma questa è una situazione in cui è consentito copy elision, quindi è più probabile che newText
venga inizializzato direttamente dalla funzione return, senza temporaneo.
Ma dove è memorizzato esattamente questo valore?
Spetta al compilatore dove memorizzare un temporaneo; lo standard specifica solo la sua durata. Tipicamente, verrà trattato come una variabile automatica, memorizzata in registri o nel frame dello stack della funzione.
E cosa succede dopo la copia?
La durata di un temporaneo estende fino alla fine del full-espressione che lo ha generato (meno che non sia utilizzato per inizializzare un referenece, nel qual caso dura finché tale riferimento). Quindi qui, viene distrutto immediatamente dopo averlo utilizzato per inizializzare newText
.
fonte
2015-01-08 14:12:42
In realtà non viene copiato a causa di [ritorno ottimizzazione del valore] (http://en.wikipedia.org/wiki/Return_value_optimization) – CoryKramer
@Cyber Non può essere spostato * e * RVO'd. È l'uno o l'altro, molto probabilmente il secondo. – juanchopanza
Buona presa, hai ragione. Ho modificato il mio commento. – CoryKramer