重新分配 CComBSTR,内存泄漏?

Reassigning CComBSTR, memory leak?

MSDN documentation 中所写,CComBSTR::operator= 创建 src 的副本。 所以当我写

someCComBSTR = std::to_wstring(someVal).c_str();

我会有一份临时的,一切正常。但是我还没有发现以前的值会发生什么,它会被释放还是重写,或者我应该先手动清空我的 CComBSTR 对象?

CComBSTR 定义在 atlcomcli.h 中 Visual Studio 的 atlmfc/include 目录。所有赋值运算符 (operator=) 都通过调用 SysFreeString 释放当前拥有的数据(除了一些在这里不感兴趣的例外)。

题中贴出的这行代码不会泄露任何资源。它正在为 CComBSTR 调用以下赋值运算符(为清楚起见添加注释):

CComBSTR& operator=(_In_opt_z_ LPCOLESTR pSrc)
{
    // Prevent self-assignment
    if (pSrc != m_str)
    {
        // Free currently owned resources
        ::SysFreeString(m_str);
        if (pSrc != NULL)
        {
            // Create copy of pSrc and take ownership
            m_str = ::SysAllocString(pSrc);
            // Error handling
            if (!*this)
            {
                AtlThrow(E_OUTOFMEMORY);
            }
        }
        else
        {
            // Clear instance data if pSrc is a null pointer
            m_str = NULL;
        }
    }
    return *this;
}