【发布时间】:2011-01-16 23:55:20
【问题描述】:
虽然这似乎是一个很常见的问题,但我并没有收获太多信息:如何在 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 共享对象也“造成”?
【问题讨论】:
-
Linux 中的共享库也会受到影响。
标签: c++ dll memory-management