Maison >développement back-end >C++ >Quand les objets temporaires en C sont-ils détruits ?

Quand les objets temporaires en C sont-ils détruits ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-26 09:27:10311parcourir

When Do Temporary Objects in C   Get Destroyed?

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 :

  • Les objets temporaires construits par défaut dans les initialiseurs de tableau peuvent voir leur durée de vie raccourcie.
  • Les arguments par défaut des constructeurs lors de la copie d'un tableau peuvent également avoir leur durée de vie est raccourcie.
  • La liaison d'une référence à des objets temporaires prolonge leur durée de vie.
  • Objets temporaires dans un initialiseur for-range ont une durée de vie prolongée.

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!

Déclaration:
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