Destruction d'objets temporaires en C
Considérant le 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'; }
Il est évident que la sortie sera être « un », « deux » et « trois ». Cela soulève la question : ce comportement est-il garanti sur tous les compilateurs C ?
Selon le standard C, dans [class.temporary], il est indiqué :
"Les objets temporaires sont détruits en dernier étape dans l'évaluation de l'expression complète qui (lexiquement) contient le point où ils ont été créés. "
Cette règle implique que les objets temporaires, tels que l'objet Foo sans nom dans le fichier fourni code, seront détruits à la fin de l'expression complète dans laquelle ils ont été créés, c'est-à-dire le point-virgule à la fin de la ligne.
Il est important de noter qu'il existe des exceptions à cette règle générale, décrites dans [class.temporary] p5, p6 et p7 :
Cependant, dans le code fourni, aucune de ces exceptions ne s'applique, garantissant que destruction garantie des objets temporaires à la fin de leurs expressions respectives.
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!