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

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

Linda Hamilton
Libérer: 2024-11-11 05:53:03
original
886 Les gens l'ont consulté

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

Pourquoi la suppression ne définit pas automatiquement le pointeur sur NULL

Malgré ses avantages potentiels dans la prévention des plantages liés au pointeur non valide, la norme C ne le fait pas exigent que l'opérateur de suppression définisse automatiquement le pointeur sur NULL après la désallocation de la mémoire. Les raisons de cette décision sont multiples.

Performances

L'ajout d'une instruction pour définir le pointeur sur NULL pourrait potentiellement ralentir les performances de l'opération de suppression. Bien que cela puisse être négligeable pour la plupart des applications, cela pourrait avoir un impact sur les systèmes dont les performances sont critiques.

Constantes

Les pointeurs Const présentent un défi potentiel. Définir un pointeur const sur NULL violerait son immuabilité, conduisant à un comportement indéfini. Cependant, la norme aurait pu prévoir un cas particulier pour les pointeurs const, leur permettant d'être définis sur NULL.

Flexibilité des arguments

La norme permet explicitement que l'argument de suppression soit une rvalue, pas seulement une lvalue. Par exemple, supprimer un tableau implique de spécifier le nom du tableau comme argument : delete [] array;. Dans de tels cas, il n'est pas possible de définir le pointeur sur NULL car il ne pointe pas vers un emplacement mémoire valide après la suppression.

Autres considérations

Bjarne Stroustrup, le créateur de C reconnaît les avantages potentiels de la définition automatique de NULL lors de la suppression, mais note que les implémenteurs n'ont pas largement adopté cette pratique. Il souligne également la nécessité pour les programmeurs d'être vigilants et de s'assurer que les pointeurs sont correctement traités après la désallocation.

En résumé, même si la définition automatique de NULL par suppression aurait des avantages, la norme C a choisi de ne pas l'imposer en raison de les problèmes de performances, la nécessité de s'adapter à certains cas et l'importance de la responsabilité du programmeur dans la gestion des pointeurs.

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