Pourquoi la suppression n'attribue-t-elle pas automatiquement NULL aux pointeurs ?
La norme du langage C n'exige pas le réglage automatique des valeurs de pointeur sur NULL après avoir invoqué l'opérateur de suppression. Bien que cela puisse sembler contre-intuitif, il existe plusieurs raisons pour cette décision.
Performances
Comme mentionné dans la question, une instruction supplémentaire pour définir le pointeur sur NULL pourrait potentiellement avoir un impact sur les performances des opérations de suppression, en particulier dans le code critique en termes de performances.
Const Pointeurs
Un autre problème potentiel est que certains pointeurs peuvent être déclarés comme const. Pour ces pointeurs, il n’est pas possible de tenter de modifier leur valeur après une opération de suppression. Bien que l'on puisse affirmer qu'un cas particulier pourrait être créé pour de tels pointeurs, la norme a choisi de maintenir la cohérence en ne modifiant pas la valeur du pointeur dans tous les cas.
Arguments non-Lvalue
L'opérateur delete peut accepter des arguments non-lvalue, tels que des références rvalue. Dans ces scénarios, il n'est pas possible de modifier la valeur du pointeur. Cela pose une limitation technique à la norme pour garantir la cohérence du comportement pour tous les types d'arguments.
Explication de Bjarne Stroustrup
Bjarne Stroustrup, le créateur de C , a abordé ce problème problème :
Par conséquent, même si la suppression d'un pointeur en C ne le définit pas automatiquement sur NULL, la norme a pris en compte divers facteurs tels que les performances, les pointeurs const, les arguments non lvalue et la cohérence pour arriver à cette décision.
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!