Oui.
Le seul «mal» qu'il peut faire est d'introduire de l'inefficacité (une opération de stockage inutile) dans votre programme - mais cette surcharge sera insignifiante par rapport au coût d'allocation et de libération du bloc de mémoire dans la plupart des cas.
Si vous ne le faites pas, vous aurez un jour de mauvais bugs de déréférencement de pointeurs.
J'utilise toujours une macro pour supprimer:
#define SAFEDELETE(ptr) { delete(ptr); ptr = NULL; }
(et similaire pour un tableau, free (), libérant des poignées)
Vous pouvez également écrire des méthodes de «suppression automatique» qui prennent une référence au pointeur du code appelant, afin qu'elles forcent le pointeur du code appelant à NULL. Par exemple, pour supprimer un sous-arbre de nombreux objets:
static void TreeItem::DeleteSubtree(TreeItem *&rootObject)
{
if (rootObject == NULL)
return;
rootObject->UnlinkFromParent();
for (int i = 0; i < numChildren)
DeleteSubtree(rootObject->child[i]);
delete rootObject;
rootObject = NULL;
}
Éditer
Oui, ces techniques violent certaines règles sur l'utilisation des macros (et oui, de nos jours, vous pourriez probablement obtenir le même résultat avec des modèles) - mais en utilisant pendant de nombreuses années, je n'ai jamais accédé à la mémoire morte - l'une des plus méchantes et des plus difficiles et le plus de temps pour déboguer les problèmes auxquels vous pouvez faire face. En pratique, pendant de nombreuses années, ils ont effectivement éliminé toute une classe de bogues de chaque équipe dans laquelle je les ai présentés.
Il existe également de nombreuses façons de mettre en œuvre ce qui précède - j'essaie simplement d'illustrer l'idée de forcer les gens à NULL un pointeur s'ils suppriment un objet, plutôt que de leur fournir un moyen de libérer la mémoire qui ne NULL le pointeur de l'appelant .
Bien sûr, l'exemple ci-dessus n'est qu'un pas vers un pointeur automatique. Ce que je n'ai pas suggéré parce que l'OP posait spécifiquement des questions sur le cas de ne pas utiliser de pointeur automatique.
delete
un pointeur nul, ce qui est une des raisons pour lesquelles la mise à zéro d'un pointeur peut être bonne.