Les pointeurs peuvent être plus rapides et entraîner moins de surcharge, à la fois dans les structures de données et dans le maintien de l'empreinte d'exécution du programme. (Veuillez noter le mot «peut».)
En règle générale, si vous avez alloué une ressource, soit en effectuant votre propre allocation, soit en faisant faire quelque chose en votre nom, il vous incombe de la libérer une fois terminé.
Le fardeau de faire ce qui précède est de remettre la responsabilité sur le développeur, plutôt que d'avoir l'exécution le faire. Cela présente quelques avantages supplémentaires en ce sens que les choses peuvent être plus longues à vivre, ou traverser les frontières, ou être éliminées à des moments plus opportuns, ou ne pas avoir à porter le poids d'un ramasse-miettes.
Dans les cas exotiques, impliquant généralement des exceptions et une portée, il existe certains cas marginaux qui nécessitent d'être un peu plus prudent si le code que le nettoyage fait est évité. De façon réaliste, ces cas peuvent être conçus autour. Nous avons vécu sans code managé pendant de nombreuses décennies.
Souvent, ce qui rend les pointeurs «durs» est simplement de ne pas comprendre ce qui se passe au niveau matériel. Ce n'est rien de plus qu'une indirection.
Les pointeurs vous donnent un accès beaucoup plus brut, ce qui peut être très utile, intelligent ou nécessaire. Vous pouvez pointer n'importe où et le traiter à peu près comme n'importe quoi. Si vous utilisez vos pouvoirs divins pour de bon, c'est très, très bon.
Le côté con est généralement un gaspillage en oubliant de libérer quelque chose, ou en le libérant plus d'une fois, ou en référençant quelque chose après sa publication, ou en référençant quelque chose lorsque vous ne pointez nulle part. Ces choses entraînent souvent des plantages spectaculaires, et pour être honnête, elles indiquent généralement que vous avez un problème de logique, plutôt que les pointeurs sont fragiles.
Si vous êtes un développeur solide, l'utilisation de pointeurs ne devrait pas être plus problématique que toute autre structure de données. Encore une fois, ce n'est pas sorcier, et les gens l'ont fait pendant des décennies sans même cligner des yeux. C'est juste enseigné de façon moins approfondie de nos jours.
Cela dit, à moins que vous n'ayez besoin de pointeurs, la conveinence et les cas exoitiques qu'offre une bonne collecte des ordures rendent le travail dans un environnement géré d'autant plus agréable. C'est formidable de pouvoir récupérer de la mémoire, de l'utiliser et de l'abandonner, sachant qu'à un moment donné plus tard, il pourrait être éliminé, si cela a du sens de le faire. C'est un peu moins de code de la part du codeur, en échange d'un runtime qui soulève un peu plus.