Prenons l'exemple de code suivant:Portée de l'objet retourné par l'appelé w.r.t. les variables locales de l'appelant?
SomeClass Callee() {
// Option 1:
return SomeClass(/* initializer here */);
// Option 2:
SomeClass tmp(/* initializer here */);
// Do something to tmp here
return tmp;
}
void Caller() {
SomeClass a(/* initializer here */);
SomeClass b = Callee();
SomeClass c(/* initializer here */);
}
AFAIK, b
vivent plus longtemps que c
dans l'exemple ci-dessus, mais pas plus que a
.
Cependant, que se passe-t-il si la valeur de retour de Callee()
n'est affectée à aucune variable dans Caller()
? L'objet retourné se comportera-t-il comme b
dans l'exemple ci-dessus? Ou sera-t-il détruit avant que c
ne soit créé? Je suppose que c'est le dernier, je veux juste être sûr.
L'exemple de code est:
void Caller() {
SomeClass a(/* initializer here */);
Callee(); // what is the scope for the object returned by it?
SomeClass c(/* initializer here */);
}
Cette question n'est pas claire. Il mentionne 2 options pour la fonction, mais ne les référence jamais plus tard. De plus, je ne comprends pas la dernière phrase. Je suggère que la question soit reformulée. – SergeyA
Les objets n'ont pas d'étendues. Ils ont des vies. Les noms ont des portées. –