Les objets temporaires sont détruits à la fin de l'expression complète dont ils font partie.
Une expression complète est une expression qui n'est pas une sous-expression d'une autre expression. En général, cela signifie qu'elle se termine à la position ;
(ou )
pour if
, while
, switch
etc.) indiquant la fin de la déclaration. Dans votre exemple, c'est la fin de l'appel de fonction.
Notez que vous pouvez prolonger la durée de vie des temporaires en les liant à un fichier const
référence. Cela permet d'étendre leur durée de vie à celle de la référence :
MyClass getMyClass();
{
const MyClass& r = getMyClass(); // full expression ends here
...
} // object returned by getMyClass() is destroyed here
Si vous n'avez pas l'intention de modifier l'objet retourné, c'est une astuce intéressante pour éviter de copier l'appel au constructeur (par rapport à l'option MyClass obj = getMyClass();
), au cas où l'optimisation de la valeur de retour ne serait pas appliquée. Malheureusement, elle n'est pas très connue. (Je suppose que la sémantique de déplacement de C++11 la rendra moins utile, cependant).
1 votes
En rapport : stackoverflow.com/questions/2298781/