我正在调试一些旧的c ++ / COM代码而没有很多COM经验。
代码:
TCHAR cText[MAX_PATH] = {0};
CComBSTR myCComBstr(L"");
functionThatFillsDataInTextBuffer(&cText[0]);
myCComBstr = cText; // the empty string is leaked?
答案 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;
}