Il est sûr de supprimer un pointeur NULL ?
Et est-ce un bon style de codage ?
Il est sûr de supprimer un pointeur NULL ?
Et est-ce un bon style de codage ?
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?)
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.
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.
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.