Maison > développement back-end > C++ > Comment fonctionne la destruction d'objets en C ?

Comment fonctionne la destruction d'objets en C ?

Linda Hamilton
Libérer: 2024-11-26 05:37:08
original
965 Les gens l'ont consulté

How Does Object Destruction Work in C  ?

Destruction d'objets en C

Destruction d'objets : quoi, quand et comment

Dans C , les objets peuvent être globalement classés en objets de portée et dynamiques objets. Les objets de portée ont une durée de vie liée à leur portée englobante (par exemple, variables locales, variables globales, instances de classe), tandis que les objets dynamiques sont créés et détruits à l'aide de pointeurs (par exemple, nouveau, supprimer).

Portée Objets

  • Objets automatiques : Détruits dans l'ordre inverse de création lorsque le flux de contrôle quitte leur portée (par exemple, sortie de fonction, fin d'un bloc).
  • Objets statiques non locaux : Détruits dans l'ordre inverse de la création après l'exécution de main().
  • Objets statiques locaux : Construits lorsque le flux de contrôle entre dans leur définition pour la première fois et détruits dans l'ordre inverse après main() exécution.
  • Classe de base et sous-objets membres : Détruits dans l'ordre inverse dans le destructeur d'un objet, suivi de ses sous-objets de classe de base.
  • Éléments du tableau : Détruit par ordre décroissant.
  • Temporaire Objets : Créés à partir d'expressions prvalue, détruits lorsque l'expression complète est évaluée.

Objets dynamiques

  • Objets dynamiques ( new Foo) : Détruit en appelant explicitement delete p.
  • Tableaux dynamiques (nouveau Foo[n]) : détruits en appelant explicitement delete[] p.

Gestion des exceptions

  • Les exceptions sont propagées à travers la pile, appelant les destructeurs sur ceux précédemment créés objets automatiques.
  • Les destructeurs ne doivent jamais lever d'exceptions.
  • Si une exception se produit pendant la construction de l'objet, la mémoire sous-jacente est libérée avant que l'exception ne soit levée.

Destruction manuelle d'objets

Comme C ne dispose pas d'un ramasse-miettes, les objets dynamiques doivent être libérés manuellement pour empêcher les ressources fuites.

Pointeurs intelligents

  • Pointeurs intelligents de comptage de références (std::shared_ptr) : Détruisez automatiquement l'objet sous-jacent lorsque le le dernier std::shared_ptr faisant référence à celui-ci est détruit.

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 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