Maison > développement back-end > C++ > Quand exactement les arguments des fonctions temporaires C sont-ils détruits ?

Quand exactement les arguments des fonctions temporaires C sont-ils détruits ?

Susan Sarandon
Libérer: 2025-01-04 17:09:44
original
241 Les gens l'ont consulté

When Exactly Do C   Temporary Function Arguments Get Destroyed?

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));
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal