Une autre façon de voir les choses : la signification précise d'un pointeur constant est que vous ne pourrez pas apporter à l'objet pointé des modifications qui seraient visibles via ce pointeur ou tout autre pointeur ou référence au même objet. Mais lorsqu'un objet est détruit, tous les autres pointeurs vers l'adresse précédemment occupée par l'objet supprimé ne sont plus des pointeurs vers cet objet . Ils stockent la même adresse, mais cette adresse n'est plus l'adresse d'aucun objet (en fait, elle pourrait bientôt être réutilisée comme adresse d'un autre objet).
Cette distinction serait plus évidente si les pointeurs en C++ se comportaient comme des références faibles, c'est-à-dire que dès que l'objet est détruit, tous les pointeurs existants vers lui sont immédiatement mis à la valeur 0
. (C'est le genre de chose considérée comme trop coûteuse à l'exécution pour être imposée à tous les programmes C++, et en fait il est impossible de la rendre entièrement fiable).
UPDATE : En relisant ça neuf ans plus tard, ça fait avocat. Je trouve maintenant votre réaction initiale compréhensible. Interdire la mutation mais autoriser la destruction est clairement problématique. Le contrat implicite des pointeurs/références const est que leur existence agira comme un blocage sur la destruction de l'objet cible, c'est-à-dire la collecte automatique des déchets.
La solution habituelle consiste à utiliser presque n'importe quel autre langage à la place.