Come posso vedere, i puntatori intelligenti sono ampiamente utilizzati in molti progetti C ++ nel mondo reale.
Sebbene alcuni tipi di puntatori intelligenti siano ovviamente utili per supportare RAII e i trasferimenti di proprietà, c'è anche una tendenza a utilizzare i puntatori condivisi per impostazione predefinita , come un modo di "garbage collection" , in modo che il programmatore non debba pensare all'allocazione così tanto .
Perché i puntatori condivisi sono più popolari dell'integrazione di un vero e proprio garbage collector come Boehm GC ? (O sei d'accordo, che sono più popolari dei GC attuali?)
Conosco due vantaggi dei GC convenzionali rispetto al conteggio dei riferimenti:
- Gli algoritmi GC convenzionali non hanno problemi con i cicli di riferimento .
- Il conteggio dei riferimenti è generalmente più lento di un GC adeguato.
Quali sono i motivi per utilizzare i puntatori intelligenti di conteggio dei riferimenti?
std::unique_ptr
è sufficiente e come tale ha un overhead over over puntatori non elaborati in termini di prestazioni di runtime. Usandostd::shared_ptr
ovunque oscureresti anche la semantica della proprietà, perdendo uno dei maggiori vantaggi dei puntatori intelligenti diversi dalla gestione automatica delle risorse: una chiara comprensione dell'intento alla base del codice.