Maison >développement back-end >C++ >Pourquoi « delete » ne définit-il pas automatiquement le pointeur sur NULL en C ?

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

Linda Hamilton
Linda Hamiltonoriginal
2024-11-11 05:53:03962parcourir

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!

Déclaration:
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