En c++03
il est assez clair que la suppression d'un pointeur nul n'a aucun effet. En effet, il est explicitement indiqué dans §5.3.5/2
que :
Dans les deux cas, si la valeur de l'opérande de suppression est le pointeur nul, l'opération n'a aucun effet.
Toutefois, dans le cadre de l'actuelle projet para c++0x
cette phrase semble manquer. Dans le reste du projet, je n'ai trouvé que des phrases indiquant ce qui se passe si l'opérande de la fonction supprimer l'expression n'est pas la constante du pointeur nul. La suppression du pointeur nul est-elle toujours définie dans la norme c++0x
et si oui, où ?
Notes :
De nombreuses preuves circonstancielles suggèrent qu'il est encore bien défini.
Tout d'abord, il y a les deux phrases de §5.3.5/2
déclarant que
Dans la première alternative (supprimer l'objet), la valeur de l'opérande de suppression peut être une valeur de pointeur nulle, ...
y
Dans la seconde alternative (supprimer le tableau), la valeur de l'opérande de suppression peut être une valeur de pointeur nulle ou ...
Elles indiquent que l'opérande peut être nul, mais ne définissent pas ce qui se passe s'il l'est.
Deuxièmement, la modification du sens de l'expression delete 0
est un changement majeur, et il est très peu probable que le comité de normalisation apporte ce changement particulier. En outre, l'annexe sur la compatibilité (annexe C) de la norme c++0x
projet. L'annexe C est toutefois une section informative, qui n'a donc aucune incidence sur l'interprétation de la norme.
D'autre part, le fait que la suppression du pointeur nul doive être sans effet implique une vérification supplémentaire au moment de l'exécution. Dans de nombreux codes, l'opérande ne peut jamais être nul, de sorte que cette vérification à l'exécution est en conflit avec le principe de l'absence de frais généraux. Peut-être que le comité a simplement décidé de modifier le comportement afin de rendre le C++ standard plus conforme aux objectifs de conception déclarés du langage.