Como puedo ver, los punteros inteligentes se utilizan ampliamente en muchos proyectos C ++ del mundo real.
Aunque algún tipo de punteros inteligentes son obviamente beneficiosos para soportar RAII y transferencias de propiedad, también existe la tendencia de usar punteros compartidos por defecto , como una forma de "recolección de basura" , de modo que el programador no tenga que pensar tanto en la asignación. .
¿Por qué los punteros compartidos son más populares que integrar un recolector de basura adecuado como Boehm GC ? (¿O está de acuerdo en absoluto en que son más populares que los GC reales?)
Conozco dos ventajas de los GC convencionales sobre el conteo de referencias:
- Los algoritmos de GC convencionales no tienen problemas con los ciclos de referencia .
- El recuento de referencias es generalmente más lento que un GC adecuado.
¿Cuáles son las razones para usar punteros inteligentes de conteo de referencias?
std::unique_ptr
es suficiente y, como tal, tiene una sobrecarga cero sobre punteros sin procesar en términos de rendimiento en tiempo de ejecución. Al usarlo enstd::shared_ptr
todas partes, también oscurecería la semántica de propiedad, perdiendo uno de los principales beneficios de los punteros inteligentes además de la administración automática de recursos: una comprensión clara de la intención detrás del código.