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