Ich bin ein C-API-Wrapping, die den Anrufer ermöglicht, einen beliebigen Zeiger über Funktionsaufrufe zu setzen/erhalten. Auf diese Weise ermöglicht die C-API einem Aufrufer, beliebige Daten mit einem der C-API-Objekte zu verknüpfen. Diese Daten werden in keinem Callback verwendet, es ist nur ein Zeiger, auf den ein Benutzer zugreifen und später zugreifen kann.Lassen Sie einen Rost Void Zeiger in einem FFI gespeichert
Meine Wrapper-Struktur implementiert die Drop-Eigenschaft für das C-Objekt, das diesen Zeiger enthält. Was ich gerne tun könnte, bin mir aber nicht sicher, ob es möglich ist, dass die Daten korrekt fallen gelassen werden, wenn der Zeiger nicht null ist, wenn die Wrapper-Struktur abfällt. Ich bin mir nicht sicher, wie ich den korrekten Typ zwar von einem rohen c_void Zeiger wiederherstellen würde.
Zwei Alternativen Ich denke an sind
- in der Wrapper das Verhalten dieser beiden Anrufe implementieren. Rufen Sie die C-API nicht auf.
- Versuchen Sie nicht, irgendeine sichere Schnittstelle zu diesen Funktionen anzubieten. Dokumentieren Sie, dass der Zeiger vom Aufrufer des Wrappers verwaltet werden muss.
Was möchte ich tun? Wenn nicht, gibt es eine allgemein akzeptierte Praxis für diese Art von Situationen?
ich tatsächlich die dealloc Rückruf Lösung etwa eine Stunde gedacht hatte, bevor ich die Frage gestellt, und irgendwie vergessen darüber. Ich werde damit herumspielen und sehen, wie weit ich komme. –