Obwohl es sich offenbar um ein sehr häufiges Problem handelt, habe ich nicht viele Informationen gefunden: Wie kann ich eine sichere Schnittstelle zwischen DLL-Grenzen in Bezug auf die Speicherzuweisung schaffen?
Es ist allgemein bekannt, dass
// in DLL a
DLLEXPORT MyObject* getObject() { return new MyObject(); }
// in DLL b
MyObject *o = getObject();
delete o;
kann durchaus zu Abstürzen führen. Da aber Interaktionen wie die oben beschriebene nicht ungewöhnlich sind, muss es eine Möglichkeit geben, eine sichere Speicherzuweisung zu gewährleisten.
Natürlich könnte man eine
// in DLL a
DLLEXPORT void deleteObject(MyObject* o) { delete o; }
aber vielleicht gibt es bessere Möglichkeiten (z.B. smart_ptr?). Ich las über die Verwendung von benutzerdefinierten Allokatoren beim Umgang mit STL-Containern als gut.
Meine Anfrage bezieht sich also eher auf allgemeine Hinweise auf Artikel und/oder Literatur, die sich mit diesem Thema befassen . Gibt es spezielle Fehler, auf die man achten muss (Ausnahmebehandlung?), und ist dieses Problem nur auf DLLs beschränkt oder sind auch gemeinsam genutzte UNIX-Objekte "betroffen"?