da claudio86 » 02/12/2018, 19:15
Dereferenziare un puntatore dopo aver usato delete su di esso è un undefined behaviour, quindi in linea di principio il compilatore può generare codice qualsiasi (e quindi è sempre un errore). In realtà, però, la maggior parte dei compilatori hanno un comportamento relativamente deterministico, anche in questi casi.
Una possibilità è che l'implementazione di "cout << qualcosa" usi allocazione dinamica della memoria, e, dato che l'area di memoria puntata da p_float è libera, potrebbe sovrascriverla prima di leggerla per stampare l'output. Per verificare, potresti prima copiare il contenuto di *p_float in un'altra variabile, e stampare quella.
Inoltre, per tipi complessi (classi), delete chiama anche il relativo distruttore, che potrebbe sovrascrivere la memoria puntata.
"This theorem, as many others, is proven by writing zero in a creative way…"