Tenga cuidado en las transiciones - al asignar punteros crudos e inteligentes. Los malos indicadores inteligentes, como _com_ptr_t
, lo empeoran al permitir conversiones implícitas. La mayoría de los errores ocurren en la transición.
Tenga cuidado con los ciclos - como se mencionó, necesita punteros débiles para romper los ciclos. Sin embargo, en un gráfico complejo que no siempre es fácil de hacer.
Demasiada elección - la mayoría de las bibliotecas ofrecen implementaciones diferentes con diferentes ventajas/inconvenientes. Desafortunadamente, la mayoría de las veces estas diferentes variantes no son compatibles, lo que se convierte en una prueba al mezclar bibliotecas. (por ejemplo, LibA usa LOKI, LibB usa refuerzo). Tener que planificar por adelantado para enable_shared_from_this
es una mierda, tener que decidir convenciones de nomenclatura entre intrusive_ptr
, shared_ptr
y weak_ptr
para un grupo de objetos apesta.
Para mí, la ventaja más correo de shared_ptr (o uno de una funcionalidad similar) es que está acoplado a su política de destrucción en la creación. Tanto C++ como Win32 ofrecen tantas maneras de deshacerse de cosas que ni siquiera es divertido. El acoplamiento en tiempo de construcción (sin afectar el tipo real del puntero) significa que tengo ambas políticas en un solo lugar.
Ya estoy, no has visto la serie MI de la mía. – Ashish