Outra maneira de ver: o significado preciso de um ponteiro const é que você não será capaz de fazer alterações no objeto apontado que seria visível por meio desse ou de qualquer outro ponteiro ou referência ao mesmo objeto. Mas quando um objeto é destruído, todos os outros ponteiros para o endereço anteriormente ocupado pelo objeto agora excluído não são mais ponteiros para esse objeto . Eles armazenam o mesmo endereço, mas esse endereço não é mais o endereço de nenhum objeto (na verdade, ele logo poderá ser reutilizado como o endereço de um objeto diferente).
Essa distinção seria mais óbvia se os ponteiros em C ++ se comportassem como referências fracas, ou seja, assim que o objeto fosse destruído, todos os ponteiros existentes para ele seriam imediatamente definidos como 0
. (Esse é o tipo de coisa considerada muito cara em tempo de execução para ser imposta a todos os programas C ++ e, na verdade, é impossível torná-la totalmente confiável.)
ATUALIZAÇÃO : Lendo isto nove anos depois, é um advogado-ish. Agora acho sua reação original compreensível. Não permitir a mutação, mas permitir a destruição, é claramente problemático. O contrato implícito de ponteiros / referências const é que sua existência funcionará como um bloqueio na destruição do objeto de destino, também conhecido como coleta de lixo automática.
A solução usual para isso é usar quase qualquer outra linguagem.