绝大多数例子代码都是不释放的,哪个正确

解决方案 »

  1.   

    不释放---正确
    pel.Release()---正确,但只有在pel有效时才能调用,通常是 if (pel) pel.Release();
    pel->Release()---错误,将造成引用计数混乱,组件可能被提前释放。
      

  2.   

    不用pel.Release();来释放。因为CComPtr本身就是要解决这个问题而产生的:)
      

  3.   

    ATLBASE.H ~CComPtr()
    {
    if (p)
    p->Release();
    }
    void Release()
    {
    IUnknown* pTemp = p;
    if (pTemp)
    {
    p = NULL;
    pTemp->Release();
    }
    }若手动释放,必须使用 .Release()