Maison >développement back-end >C++ >Quand les objets temporaires en C sont-ils détruits ?
Destruction d'objets temporaires en C
Quand les objets temporaires en C sont-ils détruits ? Cette question se pose lorsque l'on considère l'extrait de code 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'; }
Le code imprime "un", "deux" et "trois". Ce comportement peut sembler inattendu si les objets temporaires étaient détruits immédiatement après leur création. Cependant, ce n'est pas le cas.
Les objets temporaires, tels que définis dans [class.temporary] p4, sont détruits à la fin de l'expression complète contenant le point où ils ont été créés. Dans l'exemple ci-dessus, l'expression complète est la fonction principale entière, donc les objets Foo temporaires sont détruits au niveau du point-virgule.
Ce comportement est garanti par la norme, ce qui rend la sortie du code donné cohérente entre les compilateurs C. Cependant, il existe quelques exceptions à la règle générale :
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!