Хотя это, по-видимому, очень распространенная проблема, я не собирал много информации: как я могу создать безопасный интерфейс между границами DLL в отношении выделения памяти?
Хорошо известно, что
// in DLL a
DLLEXPORT MyObject* getObject() { return new MyObject(); }
// in DLL b
MyObject *o = getObject();
delete o;
может привести к сбоям. Но поскольку взаимодействия, подобные приведенным выше, - как я уже сказал, - не редкость, должен быть способ обеспечить безопасное выделение памяти.
Конечно, можно было бы предоставить
// in DLL a
DLLEXPORT void deleteObject(MyObject* o) { delete o; }
но, возможно, есть лучшие способы (например, smart_ptr?). Я читал об использовании пользовательских распределителей при работе с контейнерами STL.
Итак, мой запрос больше посвящен общим указателям на статьи и/или литературу, посвященные этой теме. Существуют ли особые ошибки, которые нужно учитывать (обработка исключений?), И эта проблема ограничена только DLL или слишком обширными объектами UNIX?