Est-il valide de stocker la valeur de retour d'un objet dans une référence?Enregistrer la valeur de retour de la fonction dans la référence C++
class A { ... };
A myFunction()
{
A myObject;
return myObject;
} //myObject goes out of scope here
void mySecondFunction()
{
A& mySecondObject = myFunction();
}
Est-il possible de le faire afin d'éviter la copie myObject à mySecondObject? myObject n'est plus nécessaire et devrait être exactement le même que mySecondObject donc il serait en théorie plus rapide de simplement passer la propriété de l'objet d'un objet à un autre. (Ceci est également possible en utilisant le pointeur partagé boost mais qui a le surcoût du pointeur partagé.)
Merci d'avance.
Savez-vous pourquoi cela n'est pas autorisé? – Mehrdad
Je ne suis pas sûr mais je devine que la raison est qu'autoriser une référence non-const signifierait que le compilateur serait nécessaire pour déterminer quand la référence est réaffectée. Je pense que cela est normalement considéré comme faisant partie de l'analyse de la portée dynamique et non utilisé dans la norme C++. Dans le cas de const, en revanche, seule la durée de vie statique de la référence doit être déterminée. Cette analyse est probablement déjà requise dans d'autres cas et a donc été jugée acceptable. –
On peut également noter qu'il s'agit d'une fonction de suivi de pointeur assez simpliste, et que l'on pourrait imaginer un système plus avancé. Mais en général, je crois que C++ veut éviter ce problème et le déléguer au programmeur à la place. C'est ce que les pointeurs intelligents sont pour. –