Другой способ взглянуть на это: точное значение константного указателя состоит в том, что вы не сможете вносить изменения в объект, на который указывает указатель, который будет виден через этот или любой другой указатель или ссылку на тот же объект. Но когда объект разрушается, все другие указатели на адрес, ранее занятый теперь удаленным объектом , больше не являются указателями на этот объект . Они хранят один и тот же адрес, но этот адрес больше не является адресом какого-либо объекта (на самом деле он вскоре может быть снова использован в качестве адреса другого объекта).
Это различие было бы более очевидным, если бы указатели в C ++ вели себя как слабые ссылки, т. Е. Как только объект был уничтожен, все существующие указатели на него были бы немедленно установлены на 0
. (Такого рода вещи считаются слишком дорогими во время выполнения, чтобы навязывать их всем программам на C ++, и на самом деле невозможно сделать их полностью надежными.)
ОБНОВЛЕНИЕ : Читая это спустя девять лет, это юрист. Теперь я нахожу вашу оригинальную реакцию понятной. Запретить мутацию, но разрешить ее уничтожение явно проблематично. Подразумеваемый контракт константных указателей / ссылок состоит в том, что их существование будет действовать как блок уничтожения целевого объекта, a.k.a. автоматическая сборка мусора.
Обычное решение этой проблемы - использовать почти любой другой язык.