CComBSTR内存泄漏和分配

时间:2014-06-18 07:44:47

标签: c++ memory-leaks com

我正在调试一些旧的c ++ / COM代码而没有很多COM经验。

  1. 以下代码是否泄漏(空字符串丢失)是否正确?
  2. 以这种方式将cText的值分配给myCComBstr是否正确和安全?
  3. 代码:

    TCHAR cText[MAX_PATH] = {0};
    CComBSTR myCComBstr(L"");
    functionThatFillsDataInTextBuffer(&cText[0]);
    myCComBstr = cText;  // the empty string is leaked?
    

1 个答案:

答案 0 :(得分:0)

当您将数组分配给CComBSTR时,它将释放它之前持有的内容,您可以随时查看标题以查看实现方式:

CComBSTR& operator=(_In_opt_z_ LPCOLESTR pSrc)
{
  if (pSrc != m_str)
  {
    ::SysFreeString(m_str);
    if (pSrc != NULL)
    {
      m_str = ::SysAllocString(pSrc);
      if (!*this)
      {
         AtlThrow(E_OUTOFMEMORY);
      }
    }
    else
    {
      m_str = NULL;
    }
  }
  return *this;
}