CComQIPtr<IHTMLAnchorElement,&IID_IHTMLAnchorElement> pAnchor;pAnchor.release() 和 
pAnchor->release()
有什么区别呢?

解决方案 »

  1.   

    前者应该是整个指针释放,后者应该是将指针的内容释放(指针的指针)。在使用智能指针的时候,不要自己释放,否则后果很严重,严重到说不清。如果非要释放,应该这么写
    pAnchor=0;
    你还可以这样写IHTMLAnchorElementPtr pAnchor;好像很少有书说,但是实际都这么写,省事多了。
      

  2.   

    CComQIPtr<IHTMLAnchorElement,&IID_IHTMLAnchorElement> pAnchor;
    pAnchor.release()// 释放内部的接口指针,同时内部指针赋值为 NULLpAnchor->release() // 错!!!一定不要这么使用。
        // 因为这个调用并不把内部指针清空,那么析构的时候会被再次释放(释放了两次)
     
      

  3.   

    pAnchor.Release(); // 释放内部的接口指针,同时内部指针赋值为 NULL
    pAnchor->Release(); // 错!!!一定不要这么使用。
        // 因为这个调用并不把内部指针清空,那么析构的时候会被再次释放(释放了两次)参看http://www.vckbase.com/document/viewdoc/?id=1500