Controllare le transizioni - durante l'assegnazione tra puntatori grezzi e intelligenti. I cattivi puntatori intelligenti - come _com_ptr_t
- peggiorano le cose consentendo conversioni implicite. La maggior parte degli errori si verifica durante la transizione.
Attenzione per cicli - come già detto, sono necessari indicatori deboli per interrompere i cicli. Tuttavia, in un grafico complesso che non è sempre facile da fare.
Troppa scelta - la maggior parte delle librerie offre diverse implementazioni con diversi vantaggi/svantaggi. Sfortunatamente, la maggior parte delle volte queste diverse varianti non sono compatibili, il che diventa un problema quando si mischiano le librerie. (per esempio, LibA usa LOKI, LibB usa boost). Dovendo pianificare in anticipo per enable_shared_from_this
fa schifo, dover decidere convenzioni di denominazione tra intrusive_ptr
, shared_ptr
e weak_ptr
per un sacco di oggetti fa schifo.
Per me, il singolo più e vantaggio shared_ptr (o una funzionalità simile) è che è accoppiato alla sua distruzione politica alla creazione. Sia C++ che Win32 offrono così tanti modi per sbarazzarsi di cose che non è nemmeno divertente. L'accoppiamento al momento della costruzione (senza influenzare il tipo effettivo del puntatore) significa che ho entrambe le politiche in un unico posto.
Ya I am, non hai visto mio-serie MI. – Ashish