Se a è un puntatore ad una locazione di memoria dinamica.
Basta che sia un puntatore.

L'operazione di deallocazione del delete è obbligatoria ogni qual volta termina l'utilizzo della parte di memoria heap impegnata con il new, altrimenti si corre il rischio di mandare in crash il sistema
Nell`esempio di Windows ogni programma ha un proprio heap privato, e all'uscita del programma tutto l`heap viene deallocato, senza memory leaks. Il problema e` che tale heap e` limitato, e i memory leaks accumulati rimangono fino alla fine del programma, ma non oltre. Altri sistemi operativi non so come si comportano.

Una volta deallocato il puntatore esso punta a 0.
Beh, non e` detto. Leggi il post di Andrea.

BAI!