一个_com_ptr_t模板创建的智能指针(通过调用CreateInstance)
1.是不是不需要考虑调用Release方法?
2.如果不调用Release会不会内存泄漏?
3.如果赋值为NULL(ptr = NULL)是不是意味着调用Release?

解决方案 »

  1.   

    com的指针为一个引用计数
    只有在计数为0时才释放内存
    创建的对象要求调用release,
    如果赋值为NULL(ptr = NULL)不意味着调用Release
    如果利用其智能指针就可以不调用release
      

  2.   

    _com_ptr_t应该是智能指针吧
    不用release 超出作用域会自动释放
    gz
      

  3.   

    To PioneerMan((拓荒者)):
    例如:
    CMyClass::CMyClass()
    {
    m_ptrXmlDomDocument.CreateInstance( CLSID_DOMDocument );
    }CMyClass::~CMyClass()
    {
    if( m_ptrXmlDomDocument != NULL )
    m_ptrXmlDomDocument = NULL;  // 我在这里进行调试进入,发现有调用Release
    }
    // 其中m_ptrXmlDomDocument是 MSXML2::IXMLDOMDocumentPtr类型的
    // 而MSXML2::IXMLDOMDocumentPtr定义为:
    // _com_ptr_t< _com_IIID< MSXML2::IXMLDOMDocument, 0 > >
      

  4.   

    To grep():
    那么如果我的这个对象实例化多个,那么ptr = NULL会不会释放所有的引用计数?
      

  5.   

    _com_ptr_t只能保存最近的object,没有对象实例化多个,ptr = NULL释放所有的引用计数的可能性
      

  6.   

    To seanzhao(新云):超出作用域会自动释放吗?例如:我不写ptr = NULL,那么ptr在超出作用域后会调用Release吗?回答完这个问题后给分!