I puntatori possono essere più veloci e possono sostenere un sovraccarico minore, sia nelle strutture dati sia nel mantenere basso il footprint di esecuzione del programma. (Si prega di notare la parola "può".)
In generale, la regola è che, se hai assegnato una risorsa, eseguendo la tua allocazione o facendola fare qualcosa per tuo conto, allora il tuo compito è di rilasciarlo una volta terminato.
L'onere di fare quanto sopra è ricollocare la responsabilità sullo sviluppatore, piuttosto che fare eseguire il runtime. Ciò ha alcuni più vantaggi in quanto le cose possono essere vissute più a lungo, o attraversare i confini, o essere smaltite in tempi più opportuni, o non devono portare il peso di un garbage collector.
In casi esotici, che di solito coinvolgono eccezioni e portata, ci sono alcuni casi limite che richiedono di essere un po 'più cauti se il codice che fa la pulizia viene evitato. 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 indiretta.
I puntatori ti danno un accesso molto più grezzo, e questo può essere molto utile, intelligente o necessario. Puoi indicare ovunque e trattarlo praticamente come qualsiasi cosa. Se usi bene i tuoi poteri simili a quelli di Dio, è molto, molto buono.
Il lato negativo è di solito uno spreco, dimenticando di rilasciare qualcosa, o rilasciandolo più di una volta, o riferendosi a qualcosa dopo che è stato rilasciato, o riconfigurando qualcosa quando non stai puntando da nessuna parte. Queste cose spesso si traducono in arresti anomali 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'uso dei puntatori non dovrebbe essere più problematico di qualsiasi altra struttura di dati. Di nuovo, non è scienza missilistica, e la gente lo ha fatto per decenni senza nemmeno battere ciglio. Al giorno d'oggi è appena insegnato molto meno.
Tutto ciò detto, a meno che tu non abbia bisogno di indicazioni, i casi di convinzione e di denuncia che una buona raccolta di dati inutili fornisce rende il lavoro in un ambiente gestito molto più bello. È 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 codificatore, in cambio di un runtime che fa un po' di sollevamento extra.