Il fatto che si stia effettuando una chiamata al metodo non ha importanza qui. L'inizializzazione dei parametri di riferimento durante una chiamata di funzione non è diversa da un'inizializzazione di riferimento autonoma ed è regolata dalle stesse regole.
Le regole di inizializzazione del riferimento sono un po 'complicate, ma la linea di fondo è che se l'inizializzatore è un lvalue (l'argomento nella chiamata al metodo nel tuo caso) e il tipo del riferimento è lo stesso del tipo di l'inizializzatore (cioè il tipo del parametro è uguale al tipo di argomento), quindi il riferimento sarà associato direttamente. Cioè non viene creata alcuna copia.
Object a; // class type
Object &r = a; // no copying
const Object &cr = a; // no copying
Se questi requisiti non sono soddisfatti (come se l'inizializzatore è un rvalue, per esempio), allora tutto dipende. In alcuni casi la copia potrebbe e avverrà. Ad esempio
const Object &tr = Object();
può essere interpretato dal compilatore come
const Object &tr = Object(Object(Object(Object())));
con numero finito dipende dall'implementazione di copyings. Ovviamente, per motivi di efficienza, i compilatori normalmente cercano di non creare copie non necessarie, anche quando sono autorizzati a copiare.
Un classico esempio che spesso suscita dibattito sulla validità del comportamento copia del compilatore è l'inizializzazione di riferimento nelle espressioni come la seguente
Object a;
const Object &r = <some condition> ? a : Object();
Una persona che conosce la semantica C++ di riferimento capirebbe che espressioni come quanto sopra è probabilmente la logica alla base dell'autorizzazione standard per eseguire copie superflue durante l'inizializzazione del riferimento.
tua terminologia non dovrebbe suggerire che 'anotherObject' sta creando una copia di se stesso .. dell'oggetto che viene creato dopo la nuova sarà la creazione di una copia di' anotherObject'. –
@Hassan: non modificare il significato della domanda senza chiedere all'OP. Questa è una distinzione importante. '& anotherObject' è un puntatore, non un riferimento. –
"non si può dire" che 'new object (& anotherObject)' creerà implicitamente una copia di un altro oggetto (che è ciò che la formulazione suggerisce). Affinché tale affermazione sia valida, la sintassi deve essere corretta. –