342 votes

Il est sûr de supprimer un pointeur NULL ?

Il est sûr de supprimer un pointeur NULL ?

Et est-ce un bon style de codage ?

307voto

ruslik Points 8442

delete effectue le contrôle de toute façon, donc le vérifier de votre côté ajoute des frais généraux et semble plus laid. Une très bonne pratique donne le pointeur NULL après delete (aide à éviter la double suppression et d' autres problèmes de corruption de mémoire similaires).

J'adorerais aussi que delete par défaut définisse le paramètre sur NULL comme dans

 #define my_delete(x) {delete x; x = NULL;}
 

(Je connais les valeurs R et L, mais ne serait-ce pas gentil?)

87voto

Chubsdad Points 14310

Le C++0x projet de Norme.

$5.3.5/2 - "[...]Dans les deux alternative, la valeur de l'opérande de supprimer peut être un pointeur null de la valeur.[...'"

Bien sûr, personne ne pourrait jamais le faire "supprimer" d'un pointeur avec la valeur NULL, mais il est sécuritaire de le faire. Idéalement, on ne devrait pas avoir de code qui fait la suppression d'un pointeur NULL. Mais il est parfois utile lors de la suppression de pointeurs (par exemple dans un conteneur) arrive dans une boucle. Depuis la suppression d'une valeur de pointeur NULL est sûr, on peut vraiment écrire la logique de suppression sans autorisation explicite et vérifie NULL opérande à supprimer.

En aparté, C Standard $7.20.3.2 dit aussi que "libre" sur un pointeur NULL n'a aucune action.

La fonction libre provoque l'espace pointé par ptr pour être libéré, c'est, mis à disposition pour de plus amples l'allocation. Si ptr est un pointeur null, aucune action ne se produit.

53voto

Jonathan Leffler Points 299946

Oui, c’est sûr.

Il n’y a pas de mal à la suppression d’un pointeur null ; il souvent réduit le nombre de tests à la queue d’une fonction si les pointeurs non allouées sont initialisés à zéro et puis tout simplement supprimé.

22voto

Brian R. Bondy Points 141769

Supprimer un pointeur nul n'a aucun effet. Ce n'est pas forcément un bon style de codage parce que ce n'est pas nécessaire, mais ce n'est pas mauvais non plus.

Si vous recherchez de bonnes pratiques de codage, pensez plutôt à utiliser des pointeurs intelligents. Vous n'avez donc pas besoin de delete du tout.

-4voto

pheest Points 19

J'ai expérimenté qu'il n'est pas sûr (VS2010) de supprimer [] NULL (ie la syntaxe de tableau). Je ne suis pas sûr que cela soit conforme à la norme C ++.

Il est prudent de supprimer NULL (syntaxe scalaire).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X