Quand les arguments de fonction temporaires meurent-ils ?
En C, lorsqu'un objet temporaire est créé comme argument d'une fonction, le compilateur automatiquement gère sa durée de vie. Cela soulève la question : à quel moment l'appel du destructeur de l'objet temporaire est-il garanti ?
Selon le standard C, les objets temporaires sont détruits à la fin de l'expression complète dont ils font partie. Ici, une expression complète est une expression qui n’est pas une sous-expression d’une autre expression. Il se termine généralement par le point-virgule (;) ou la parenthèse fermante () des instructions de flux de contrôle (par exemple, if, while, switch).
Dans l'exemple fourni :
class MyClass { MyClass(int a); }; myFunction(MyClass(42));
Le L'objet temporaire MyClass créé en tant qu'argument de fonction sera détruit après la fin de l'instruction d'appel de fonction, c'est-à-dire lorsque le point-virgule est rencontré. Par conséquent, vous pouvez supposer que le destructeur sera appelé avant que les instructions suivantes ne soient exécutées.
Il convient de noter que la durée de vie des temporaires peut être prolongée à l'aide de références const. En liant un temporaire à une référence const, sa durée de vie est prolongée pour correspondre à celle de la référence :
MyClass getMyClass(); { const MyClass& r = getMyClass(); // full expression ends here ... } // object returned by getMyClass() is destroyed here
Cette technique permet d'économiser des constructions de copie inutiles tout en préservant la valeur renvoyée par une fonction, notamment lors de l'optimisation de la valeur de retour. n’est pas applicable. Cependant, avec l'avènement de la sémantique des mouvements en C 11, son utilité a quelque peu diminué.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!