相关疑难解决方法(0)

跨DLL的内存/堆管理

虽然它似乎是一个非常常见的问题,但我没有收集到太多信息:如何在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共享对象?

c++ dll memory-management

20
推荐指数
3
解决办法
1万
查看次数

DLL new/delete是否覆盖用户代码new/delete?

各位,如果我覆盖全局new并删除我的dll代码,这会覆盖用户代码new并删除吗?我做了一个测试,它显示用户new和delete不会受到影响.如果我想让用户代码为new并删除被我的sdk new/delete替换,该怎么做.

模板类是什么情况.模板类定义包括一些新的/删除.用户代码可以实例化它.然后,它可能会使用用户new/delete,对吗?

c++ visual-c++

6
推荐指数
1
解决办法
1734
查看次数

标签 统计

c++ ×2

dll ×1

memory-management ×1

visual-c++ ×1