Prestazioni: shared_ptr
esegue abbastanza bene, ma nella mia esperienza è leggermente meno efficiente di gestione della memoria esplicita, soprattutto perché è di riferimento contati e il conteggio dei riferimenti deve assegnato pure. Quanto bene funzioni dipende da molti fattori e quanto bene si confronta con i garbage collector di Java/C# può essere determinato solo caso per caso (dipende dall'implementazione del linguaggio tra gli altri fattori).
Ciclismo è possibile solo con weak_ptr
, non con due shared_ptr
s. Java consente di pedalare senza ulteriori indugi; il suo garbage collector sarà break the cycles. La mia ipotesi è che C# faccia lo stesso.
Tutto il resto: l'oggetto indicato da uno shared_ptr
viene distrutto non appena l'ultimo riferimento ad esso non rientra nell'ambito. Il distruttore viene chiamato immediatamente. In Java, il finalizzatore non può essere chiamato immediatamente. Non so come C# si comporti su questo punto.
fonte
2010-12-31 15:32:39
Nota sulle prestazioni, se viene utilizzato 'make_shared' (http://www.boost.org/doc/libs/release/libs/smart_ptr/make_shared.html) allora il conteggio dei riferimenti e l'oggetto di riferimento sono allocati in un blocco . – dalle
Probabilmente, il più grande successo nelle prestazioni con 'shared_ptr' è l'incremento/decremento interbloccato del contatore ref – sbk
@sbk: perché pensi che sia un successo in termini di prestazioni. Solitamente è implementato come una singola istruzione di assemblaggio (non è necessario un blocco su hardware che lo supporti implicitamente). –