Destruction d'objets temporaires en C
On pourrait se demander quand les objets temporaires, créés par des arguments de valeur pour des appels de fonction ou des constructeurs, sont détruits. Le moment précis de leur disparition est crucial pour déterminer l'exécution correcte du code impliquant des entités temporairement allouées.
Pour illustrer le problème, considérons l'exemple suivant :
#include <iostream> struct Foo { const char* m_name; ~Foo() { std::cout << m_name << '\n'; } }; int main() { Foo foo{"three"}; Foo{"one"}; // unnamed object std::cout << "two" << '\n'; }
Ce code imprimerait-il " un deux trois"? Pas nécessairement. Le comportement dépend du compilateur C et des paramètres particuliers utilisés pour la compilation.
Selon le standard C ([class.temporary] p4), la durée de vie d'un objet temporaire dure jusqu'à la fin de l'expression complète dans laquelle il a été créé. dans. Dans l'exemple fourni, l'expression complète est la fonction principale entière. Par conséquent, la destruction des objets Foo temporaires se produit à la fin de main, ce qui est conforme à la séquence d'impression observée.
Cependant, [class.temporary] p5, p6 et p7 définissent plusieurs exceptions à cette règle générale. . Par exemple, la durée de vie des objets temporaires lors de l'initialisation des tableaux peut être raccourcie. De plus, lier une référence à un objet temporaire ou l'utiliser dans un initialiseur for-range peut prolonger sa durée de vie.
En conclusion, le moment précis de la destruction d'un objet temporaire en C est régi par la norme. Si dans la plupart des cas, les temporaires sont détruits à la fin de l'expression qui les a créés, certaines exceptions et optimisations du compilateur peuvent modifier ce comportement. comprendre ces nuances est essentiel pour écrire du code C correct et prévisible.
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!