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!