Le déréférencement d'un pointeur et son passage à une fonction qui prend son argument par référence créent-ils une copie de l'objet ?
Réponses
Trop de publicités?Dans le cas simple, non. Il existe cependant des cas plus compliqués :
void foo(float const& arg);
int * p = new int(7);
foo(*p);
Ici, un objet temporaire est créé, car le type du pointeur déréférencé ( int
) ne correspond pas au type de base du paramètre de fonction ( float
). Une séquence de conversion existe et le temporaire converti peut être lié à arg
puisqu'il s'agit d'une référence const.
Espérons que ce ne soit pas le cas : ce serait le cas si la fonction appelée prenait son argument par valeur.
De plus, c'est le comportement attendu d'une référence :
void inc(int &i) { ++i; }
int main()
{
int i = 0;
int *j = &i;
inc(*j);
std::cout << i << std::endl;
}
Ce code devrait afficher 1
car inc
prend son argument par référence. Si une copie avait été faite lors de l' inc
, le code imprimerait 0
.