Un altro modo di vederlo: il significato preciso di un puntatore const è che non sarai in grado di apportare modifiche all'oggetto puntato che sarebbe visibile tramite quello o qualsiasi altro puntatore o riferimento allo stesso oggetto. Ma quando un oggetto si distrugge, tutti gli altri puntatori all'indirizzo precedentemente occupato dall'oggetto ora eliminato non sono più puntatori a quell'oggetto . Memorizzano lo stesso indirizzo, ma quell'indirizzo non è più l'indirizzo di alcun oggetto (infatti potrebbe presto essere riutilizzato come indirizzo di un oggetto diverso).
Questa distinzione sarebbe più ovvia se i puntatori in C ++ si comportassero come riferimenti deboli, cioè non appena l'oggetto viene distrutto, tutti i puntatori esistenti ad esso verrebbero immediatamente impostati su 0
. (Questo è il genere di cose considerate troppo costose in fase di esecuzione da imporre a tutti i programmi C ++, e in effetti è impossibile renderle completamente affidabili.)
AGGIORNAMENTO : Rileggendolo nove anni dopo, è un avvocato. Ora trovo comprensibile la tua reazione originale. Non consentire la mutazione ma consentire la distruzione è chiaramente problematico. Il contratto implicito dei puntatori / riferimenti const è che la loro esistenza agirà come un blocco sulla distruzione dell'oggetto di destinazione, alias garbage collection automatica.
La solita soluzione a questo è usare quasi qualsiasi altra lingua invece.