Maison > développement back-end > C++ > L'ordre de destruction des objets temporaires est-il garanti en C ?

L'ordre de destruction des objets temporaires est-il garanti en C ?

Susan Sarandon
Libérer: 2024-11-12 07:49:01
original
950 Les gens l'ont consulté

Is the Destruction Order of Temporary Objects Guaranteed in C  ?

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

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 :

  1. Raccourcissement de la durée de vie des objets temporaires construits par défaut dans un tableau initialiseurs.
  2. Raccourcir la durée de vie des arguments par défaut des constructeurs lors de la copie de tableaux.
  3. Prolonger la durée de vie des objets temporaires en leur liant une référence.
  4. Prolonger la durée de vie des objets temporaires. objets dans un "for-range-initializer".

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!

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