虽然它似乎是一个非常常见的问题,但我没有收集到太多信息:如何在DLL边界之间创建有关内存分配的安全接口?
众所周知
// in DLL a
DLLEXPORT MyObject* getObject() { return new MyObject(); }
// in DLL b
MyObject *o = getObject();
delete o;
Run Code Online (Sandbox Code Playgroud)
肯定会导致崩溃.但是,由于像上面那样的交互 - 我敢说 - 并不罕见,因此必须有一种方法来确保安全的内存分配.
当然,人们可以提供
// in DLL a
DLLEXPORT void deleteObject(MyObject* o) { delete o; }
Run Code Online (Sandbox Code Playgroud)
但也许有更好的方法(例如smart_ptr?).我也读到了在处理STL容器时使用自定义分配器的问题.
所以我的调查更多的是关于处理这个主题的文章和/或文献的一般指示.是否存在需要注意的特殊谬误(异常处理?)并且这个问题仅限于DLL还是"受到"的UNIX共享对象?
各位,如果我覆盖全局new并删除我的dll代码,这会覆盖用户代码new并删除吗?我做了一个测试,它显示用户new和delete不会受到影响.如果我想让用户代码为new并删除被我的sdk new/delete替换,该怎么做.
模板类是什么情况.模板类定义包括一些新的/删除.用户代码可以实例化它.然后,它可能会使用用户new/delete,对吗?