DLL中New和外部Delete以及跨DLL传递对象的问题
来源:互联网 发布:mac磁盘名称格式 编辑:程序博客网 时间:2024/05/05 07:26
不同的DLL中完全可能会维护不同的局部堆,这与编译器的实现有关。有些编译器可以选择使用进程共享的局部堆,但性能会受影响。
如果是不同的局部堆,当你在DLL中new时,是在DLL的堆中分配的;而当你在EXE中delete时,EXE会认为它是在EXE的局部堆中分配的,从而用EXE的堆信息去释放它,从而可能导致错误。具体情况与堆管理代码的实现有关。
最好为你的class或struct提供一个虚的free方法,在里面调用delete。不管是从EXE中分配的还是从DLL中分配的,都可以安全地用free方法释放,因为free是虚的,它的代码会和分配它的代码编译在同一个可执行体中。
我不赞成用引出类的方法提供功能,因为类成员的签名生成并没有一个标准,很难使用。
用DLL提供的类最好是只引出创建对象的函数,返回类型是一个“纯抽象类”指针,我说的“纯抽象类”指没有成员变量,没有非抽象方法的类。并且有一个公开的抽象的free方法负责释放。使用时调用创建函数创建一个(衍生类) 的对象并返回,然后调用对象的成员方法来完成操作。
- DLL中New和外部Delete以及跨DLL传递对象的问题
- [转载]有关DLL中New和外部Delete以以及跨DLL传递对象的若干问题
- 有关DLL中New和外部Delete以以及跨DLL传递对象的若干问题
- [转载]有关DLL中New和外部Delete以以及跨DLL传递对象的若干问题
- dll中使用new和delete
- C++开发DLL中使用new和delete注意事项
- 关于DLL new exe delete问题
- DLL中传递STL参数,vector对象作为dll参数传递等问题
- DLL中传递STL参数,vector对象作为dll参数传递等问题
- DLL中传递STL参数,vector对象作为dll参数传递等问题(转)
- DLL中传递STL参数,vector对象作为dll参数传递等问题
- DLL中传递STL参数,vector对象作为dll参数传递等问题(转)
- DLL中传递STL参数,vector对象作为dll参数传递等问题(转)
- android中adb不是内部或者外部指令以及丢失adbwinapi.dll问题 的处理
- c++中new和delete,delete[]的匹配问题(转载)
- 关于DLL中new在主程序中释放的问题
- 关于在dll中申请内存,外部释放的问题
- 关于在dll中申请内存,外部释放的问题
- vs 工程 修改 building前行为(提示用户选择,不保存,保存)
- 边学边做ROR(安装ruby-debug)
- 2011-7-30 21:57:35
- First chance exception 与 Second chance exception
- linux,叫你如何管理磁盘分区
- DLL中New和外部Delete以及跨DLL传递对象的问题
- vs2008 编译两个同文件名源文件只生成一份obj文件之bug
- 演译推理与归纳推理
- 铁锅的合理使用( 除锈 和 除黑垢 )
- HTML5的local storage存储的数据到底存到哪去了
- 在svn客户端中重新输入用户名和密码
- Source Insight使用方法和技巧
- 消队队列和UI的关系
- u-boot中的.balignl 16,0xdeadbeef的理解