Maison > développement back-end > C++ > le corps du texte

Comment fonctionne la destruction d'objets en C ?

Linda Hamilton
Libérer: 2024-11-26 05:37:08
original
867 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!

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