Otra forma de verlo: el significado preciso de un puntero constante es que no podrá realizar cambios en el objeto señalado que sería visible a través de ese o cualquier otro puntero o referencia al mismo objeto. Pero cuando un objeto se destruye, todos los demás punteros a la dirección ocupada anteriormente por el objeto ahora eliminado ya no son punteros a ese objeto . Almacenan la misma dirección, pero esa dirección ya no es la dirección de ningún objeto (de hecho, es posible que pronto se reutilice como la dirección de un objeto diferente).
Esta distinción sería más obvia si los punteros en C ++ se comportaran como referencias débiles, es decir, tan pronto como se destruye el objeto, todos los punteros existentes se establecerían inmediatamente en 0
. (Ese es el tipo de cosas que se consideran demasiado costosas en tiempo de ejecución para imponerlas en todos los programas de C ++ y, de hecho, es imposible hacerlo completamente confiable).
ACTUALIZACIÓN : Leyendo esto nueve años después, es como un abogado. Ahora encuentro comprensible su reacción original. No permitir la mutación pero permitir la destrucción es claramente problemático. El contrato implícito de punteros / referencias constantes es que su existencia actuará como un bloqueo en la destrucción del objeto de destino, también conocido como recolección automática de basura.
La solución habitual a esto es utilizar casi cualquier otro idioma.