Los punteros pueden ser más rápidos y pueden generar menos gastos generales, tanto en estructuras de datos como en mantener baja la huella de ejecución del programa. (Tenga en cuenta la palabra 'puede').
En general, la regla es que si asignó un recurso, ya sea realizando su propia asignación o haciendo que algo lo haga en su nombre, entonces es su trabajo liberarlo cuando haya terminado.
La carga de hacer lo anterior es volver a colocar la responsabilidad en el desarrollador, en lugar de que el tiempo de ejecución lo haga. Esto tiene algunas ventajas más, ya que las cosas pueden durar más tiempo, cruzar fronteras o eliminarse en momentos más oportunos o no tener que cargar con el peso de un recolector de basura.
En casos exóticos, que generalmente incluyen excepciones y alcance, hay algunos casos extremos que requieren que uno sea un poco más cuidadoso si se evita el código que hace la limpieza. Siendo realistas, estos casos se pueden diseñar alrededor. Vivimos sin código administrado durante muchas décadas.
A menudo, lo que hace que los punteros sean "difíciles" es simplemente no entender lo que está sucediendo a nivel de hardware. No es más que indirección.
Los punteros le brindan mucho más acceso sin procesar, y esto puede ser muy útil, inteligente o necesario. Puede apuntar a cualquier lugar y tratarlo casi como cualquier cosa. Si usas tus poderes divinos para bien, es muy, muy bueno.
La desventaja generalmente es un desperdicio al olvidarse de liberar algo, o al liberarlo más de una vez, o al hacer referencia a algo después de su lanzamiento, o al volver a hacer referencia a algo cuando no está apuntando a ninguna parte. Estas cosas a menudo resultan en choques espectaculares, y para ser honesto, generalmente son indicativos de que tienes un problema lógico, en lugar de que los indicadores sean frágiles.
Si es un desarrollador sólido, el uso de punteros no debería ser más problemático que cualquier otra estructura de datos. Nuevamente, no es ciencia espacial, y la gente lo hizo durante décadas sin siquiera pestañear. Simplemente se enseña menos a fondo en estos días.
Dicho todo esto, a menos que necesite punteros, la conveniencia y los casos exóticos que proporciona una buena recolección de basura hace que trabajar en un entorno administrado sea mucho más agradable. Es genial poder tomar algo de memoria, usarlo y abandonarlo, sabiendo que en algún momento posterior, podría descartarse, si tiene sentido hacerlo. Eso es un poco menos de código por parte del codificador, a cambio de un tiempo de ejecución que levanta un poco más.