I puntatori possono essere più veloci e possono comportare un minor sovraccarico, sia nelle strutture di dati che nel ridurre il footprint dell'esecuzione del programma. (Nota la parola "can".)
In generale la regola è, se hai allocato una risorsa, eseguendo la tua allocazione o facendo fare qualcosa per tuo conto, allora è tuo compito rilasciarla al termine.
L'onere di fare quanto sopra è rimettere la responsabilità sullo sviluppatore, piuttosto che farlo eseguire dal runtime. Ciò ha alcuni più vantaggi in quanto le cose possono essere vissute più a lungo, oltrepassare i confini, o essere smaltite in momenti più opportuni, o non dover trasportare il peso di un bidone della spazzatura.
In casi esotici, che di solito comportano eccezioni e portata, ci sono alcuni casi limite che richiedono di essere un po 'più attenti se si evita il codice che esegue la pulizia. Realisticamente, questi casi possono essere progettati intorno. Abbiamo vissuto senza codice gestito per molti decenni.
Spesso ciò che rende i puntatori "difficili" è semplicemente non capire cosa sta succedendo a livello hardware. Non è altro che l'indirizzamento indiretto.
I puntatori ti offrono un accesso molto più semplice e questo può essere molto utile, intelligente o necessario. Puoi indicare ovunque e trattarlo praticamente come qualsiasi cosa. Se usi i tuoi poteri simili a Dio per il bene, è molto, molto buono.
La contro è di solito uno spreco dimenticando di rilasciare qualcosa, o rilasciandolo più di una volta, o facendo riferimento a qualcosa dopo che è stato rilasciato, o facendo riferimento a qualcosa quando non si punta da nessuna parte. Queste cose spesso provocano crash spettacolari e, ad essere onesti, di solito indicano che hai un problema logico, piuttosto che i puntatori sono fragili.
Se sei uno sviluppatore solido, l'utilizzo dei puntatori non dovrebbe essere più problematico di qualsiasi altra struttura di dati. Ancora una volta, non è scienza missilistica e la gente lo ha fatto per decenni senza nemmeno batter ciglio. In questi giorni viene semplicemente insegnato in modo meno approfondito.
Detto questo, a meno che tu non abbia bisogno di puntatori, la convinenza e i casi esoitici forniti da una buona raccolta dei rifiuti rendono il lavoro in un ambiente gestito molto più piacevole. È bello essere in grado di afferrare un po 'di memoria, usarlo e abbandonarlo, sapendo che in un secondo momento potrebbe essere scartato, se ha senso farlo. Questo è un po 'meno codice da parte del programmatore, in cambio di un runtime che fa un po' di sollevamento extra.