Maison >développement back-end >C++ >Annulation des pointeurs après suppression : mesure de précaution ou piège potentiel ?
La pratique consistant à définir des pointeurs sur NULL après les avoir supprimés est souvent considérée comme une bonne pratique, mais ce n'est pas aussi universellement applicable comme on pourrait le penser.
En C , les pointeurs peuvent être définis sur NULL pour éviter les plantages potentiels causés par le double supprime. Lorsqu'un pointeur est défini sur NULL, toute tentative ultérieure de suppression sera inoffensive. Cela contraste avec la suppression d'un pointeur qui a déjà été supprimé, ce qui peut conduire à un comportement indéfini.
Considérez l'exemple suivant :
Foo* foo = 0; // Sets the pointer to NULL delete foo; // Won't do anything
Ici, le pointeur est initialement défini sur NULL. , donc tenter de le supprimer n'aura aucun effet.
Cependant, si le pointeur n'est pas réglé sur NULL :
Foo* foo = new Foo(); delete foo; // Deletes the object delete foo; // Undefined behavior
La deuxième opération de suppression provoquera un comportement indéfini car le pointeur a déjà été supprimé et la mémoire vers laquelle il pointait a été libérée.
Bien que l'annulation des pointeurs après la suppression puisse éviter les plantages , il peut également masquer les bogues à double suppression, les laissant non gérés. Il est préférable d'éviter complètement les bugs de double suppression, mais en pratique, cela peut être difficile.
Les pointeurs intelligents apportent une solution à ce problème en gérant automatiquement la mémoire, éliminant ainsi le besoin de suppression manuelle. Cependant, pour le code existant ou dans des scénarios spécifiques où la gestion manuelle de la mémoire est préférée, l'annulation des pointeurs après suppression peut aider à éviter les plantages, mais doit être utilisée avec prudence.
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!