比如说我取得了一个接口,我这么转换
1。Interface1.QueryInterface(IID_IXXX, (void**)&pWill);
2。pWill = (IWill*)Interface1第二种方法会造成内存泄露吗?

解决方案 »

  1.   

    只要你的pWill在赋值前没有干别的非法勾当的话,就不会内存泄漏,我这样使过:)
      

  2.   

    IID_IXXX是IWill的ClassID么,如果是,应该不会有引用记数问题和内泄露问题.
      

  3.   

    但是我的COM+的进程(DLLHOST)在使用方法2时内存会不断增加,我全改成了1后,基本就没有什么增加了,我测试的方法是连续调用了大约N万次。
      

  4.   

    这是两个引用,如果pWill不是方法的局部变量的话应该要增加引用计数器吧。
      

  5.   

    不会,第二种方法最后不要用Release
      

  6.   

    为什么呢?先通过CoCreateInstance得到Interface1;
    然后pWill = (IWill*)Interface1
    在没有释放pWill的时候释放了Interface1:Interface1->Release();Interface1=NULL;
    pWill->doSomething这时会怎么样?