在组件中定义了一个接口指针list
list< IUser *>  m_lstUser;
//现在要将获得接口指针放入list
//
IUser *pUser;
// 获得pUser
.....//将pUser放入m_lstUsers中
m_lstUsers.push_back(pUser); 请问:这时是否需要对pUser作Release?
即:pUser->Release

解决方案 »

  1.   

    不用,m_lstUsers释放的时候再Release 
      

  2.   

    thanks!那从list中取得一个接口指针,是否需要AddRef?//
    STDMETHODIMP CUsers::Item(VARIANT v, IUser **pItem)
    {
            std::list<IUser *>::iterator iter = m_lstUsers.begin();
    for(; iter != m_lstUsers.end(); ++iter){
    //
    IUser *pUser = *iter; //
    CComBSTR bstrName;
    pUser->get_Name(&bstrName);

    //pUser = iter->get_Name();
    if(bstrName == v.bstrVal){ //
    *pItem = pUser; //这个AddRef是否必需?
    (*pItem)->AddRef();  return S_OK;
    }
    } return S_OK;
    }
      

  3.   

     
    还有
    IUser   *pUser   =   *iter; 
    后面是否需要
    pUser->AddRef?
      

  4.   

    1)2)需要,使用完后别忘了Release
      

  5.   

    那这里是否需要iter-> Release 和pUser-> Release ???如下:
    // 
    STDMETHODIMP   CUsers::Item(VARIANT   v,   IUser   **pItem) 

    std::list <IUser   *> ::iterator   iter   =   m_lstUsers.begin(); 
    for(;   iter   !=   m_lstUsers.end();   ++iter){ 
    // 
    IUser   *pUser   =   *iter;  //这个AddRef是必需 
    pUser-> AddRef();  //那这里是否需要iter-> Release ???
    //iter-> Release
    // 
    CComBSTR   bstrName; 
    pUser-> get_Name(&bstrName);  //pUser   =   iter-> get_Name(); 
    if(bstrName   ==   v.bstrVal){  // 
    *pItem   =   pUser;  //这个AddRef是必需 
    (*pItem)-> AddRef();    //那这里是否需要pUser-> Release ???
    //pUser-> Release
    return   S_OK; 

    }  return   S_OK;