Ich habe eine C-Bibliothek, die ich nach C++ portiere, die von Hand reference-counted Strukturen verwendet. Ich habe überlegt, shared_ptr
zu verwenden, um die Referenzzählung automatisch zu verarbeiten, aber ich möchte auch die C-API beibehalten. Die alten Signaturen in etwa so aussehen:Verwendung von shared_ptr in C-Schnittstellen?
Object* object_create(void);
Object* object_retain(Object* o);
void object_release(Object* o);
Wenn ich shared_ptr
verwenden, ist es eine Möglichkeit, um effektiv dieses Handbuch Referenzzählung in einer C-API aussetzen?
Nur um zu klären; Sie wollen ein shared_ptr, um einen rohen Pointer zu erhalten, der von 'object_create' erhalten wurde, und ihn' object_release' zum relevanten Zeitpunkt aufrufen? –
@OliCharlesworth Nein, ich erhalte "Objekt" als eine Klasse (anstelle einer Struktur) in C++, und ich verwende 'shared_ptr' innerhalb des C++ Codes. Ich bin daran interessiert, ob es möglich ist, einen rohen Zeiger von einem shared_ptr zu bekommen und ihn dann irgendwie mit dem Refcount von shared_ptr arbeiten zu lassen. –
Sie könnten besser mit [Boost.intrusive_ptr] (http://www.boost.org/doc/libs/1_53_0/libs/smart_ptr/ intrusive_ptr.html). – Angew