Maison > développement back-end > C++ > le corps du texte

Pourquoi « delete » ne définit-il pas automatiquement les pointeurs sur NULL en C ?

Linda Hamilton
Libérer: 2024-11-24 22:00:18
original
456 Les gens l'ont consulté

Why Doesn't `delete` Automatically Set Pointers to NULL in C  ?

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 :

  • Il s'attendait à ce que les implémentations incluent une fonctionnalité qui remet automatiquement à zéro les opérandes lvalue après delete, mais cette pratique n'a pas été largement adoptée.
  • Cependant, il souligne que l'argument de delete peut ne pas toujours être une lvalue, ce qui introduit des difficultés techniques pour la standardisation de ce comportement.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal