Ho una libreria C su cui sto eseguendo il porting su C++ che fa un uso pesante delle strutture conteggiate manualmente. Ho considerato l'utilizzo di shared_ptr
per gestire automaticamente il conteggio dei riferimenti, ma voglio anche mantenere l'API C. Le vecchie firme sembrano qualcosa di simile:Utilizzo di shared_ptr nelle interfacce C?
Object* object_create(void);
Object* object_retain(Object* o);
void object_release(Object* o);
Se uso shared_ptr
, c'è qualche modo per esporre in modo efficace questo conteggio dei riferimenti manuale in un API C?
Giusto per chiarire; vuoi un shared_ptr per racchiudere un puntatore raw ottenuto da 'object_create', e chiamarlo' object_release' nel momento rilevante? –
@OliCharlesworth No, sto reimplendendo 'Object' come una classe (invece che una struct) in C++, e sto usando' shared_ptr' all'interno del codice C++. Sono interessato se è possibile ottenere un puntatore raw da un shared_ptr e poi in qualche modo farlo funzionare con il conteggio di shared_ptr. –
Potrebbe essere meglio usare [Boost.intrusive_ptr] (http://www.boost.org/doc/libs/1_53_0/libs/smart_ptr/intrusive_ptr.html). – Angew