大家看这样是不是会造成内存泄露?

seabelial 2004-08-31 10:09:56
比如说我取得了一个接口,我这么转换
1。Interface1.QueryInterface(IID_IXXX, (void**)&pWill);
2。pWill = (IWill*)Interface1

第二种方法会造成内存泄露吗?
...全文
140 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fool_leave 2004-09-03
  • 打赏
  • 举报
回复
为什么呢?

先通过CoCreateInstance得到Interface1;
然后pWill = (IWill*)Interface1
在没有释放pWill的时候释放了Interface1:Interface1->Release();Interface1=NULL;
pWill->doSomething

这时会怎么样?
GRWriter 2004-09-02
  • 打赏
  • 举报
回复
不会,第二种方法最后不要用Release
fool_leave 2004-09-02
  • 打赏
  • 举报
回复
这是两个引用,如果pWill不是方法的局部变量的话应该要增加引用计数器吧。
csdn_cht 2004-09-02
  • 打赏
  • 举报
回复
我想不会产生内存泄漏
shudingbo 2004-09-02
  • 打赏
  • 举报
回复
关注!

用dynamic_cast转换
FlyNesta 2004-09-01
  • 打赏
  • 举报
回复
这个第二种方式的工作模式相关,而与内存泄漏无关
seabelial 2004-09-01
  • 打赏
  • 举报
回复
但是我的COM+的进程(DLLHOST)在使用方法2时内存会不断增加,我全改成了1后,基本就没有什么增加了,我测试的方法是连续调用了大约N万次。
Frank123 2004-08-31
  • 打赏
  • 举报
回复
IID_IXXX是IWill的ClassID么,如果是,应该不会有引用记数问题和内泄露问题.
FlyNesta 2004-08-31
  • 打赏
  • 举报
回复
只要你的pWill在赋值前没有干别的非法勾当的话,就不会内存泄漏,我这样使过:)

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧