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