Aunque parece ser un problema muy común, no recolecté mucha información: ¿Cómo puedo crear una interfaz segura entre los límites de la DLL con respecto a la asignación de memoria?Administración de memoria/montón en las DLL
Está bastante bien sabido que
// in DLL a
DLLEXPORT MyObject* getObject() { return new MyObject(); }
// in DLL b
MyObject *o = getObject();
delete o;
podría sin duda dará lugar a accidentes. Pero dado que las interacciones como la anterior son, como me atrevo a decir, no infrecuentes, tiene que haber una forma de garantizar una asignación de memoria segura.
Por supuesto, uno podría proporcionar
// in DLL a
DLLEXPORT void deleteObject(MyObject* o) { delete o; }
pero tal vez hay mejores maneras (por ejemplo, smart_ptr?). Leí sobre el uso de asignadores personalizados al tratar con contenedores STL también.
Así que mi pregunta es más acerca de sugerencias generales a artículos y/o literatura que trata de este tema. ¿Hay falacias especiales a tener en cuenta (manejo de excepciones?) ¿Y este problema está limitado solo a las DLL o son objetos compartidos de UNIX "infligidos" también?
Las bibliotecas compartidas en Linux también se ven afectadas. – sergiom