Ora sto imparando i medici e ho qualche domanda. A queste linee:Creazione e costruttore di oggetti C++
Foo obj(args);
Foo obj2;
obj = Foo(args);
Foo obj3 = Foo(args);
Prima parte: solo 1 costruttore chiamato (Foo) e obj
è inizializzato. Quindi, 1 creazione di oggetti.
Seconda parte: creazione dell'oggetto temporaneo obj2
, chiamata ctor predefinito per esso. Le prossime linee creiamo un'altra copia di Foo
e passiamo la sua copia in operator=()
. È giusto? Quindi, 3 oggetti temporanei locali, 2 chiamate del costruttore.
terza parte: creare 1 oggetto Foo
e passarlo di copia negli operator=()
. Quindi, 2 oggetti temprorary e 1 ctor calling.
Ho capito bene? E se è vero, il compilatore (l'ultimo gcc, ad esempio) ottimizzerà questi casi comuni?
'operator =()' di solito riceve il suo argomento per riferimento, quindi nessuna copia nel chiamarlo. – rodrigo
obj3 viene effettivamente creato utilizzando il costruttore della copia non l'operatore di assegnazione. –