Visual c++ 谁拥有从[u bstr\u t::wchar\u t*,[u bstr\u t::char*运算符返回的字符串?

Visual c++ 谁拥有从[u bstr\u t::wchar\u t*,[u bstr\u t::char*运算符返回的字符串?,visual-c++,memory-management,com,memory-leaks,bstr,Visual C++,Memory Management,Com,Memory Leaks,Bstr,\u bstr\u t::wchar\u t*,\u bstr\u t::char*返回不同类型的字符串 我需要删除还是免费它们?使用哪个函数?在使用调试器逐步实现之后,我的结论是不需要手动删除/释放返回的字符串。返回字符串的生存期由\u bstr\t内部管理 请参阅实现中的以下代码段: // Extract a const char_t* // inline _bstr_t::operator const char*() const throw(_com_error) { return

\u bstr\u t::wchar\u t*,\u bstr\u t::char*
返回不同类型的字符串


我需要
删除
还是
免费
它们?使用哪个函数?

在使用调试器逐步实现之后,我的结论是不需要手动
删除
/
释放返回的字符串。返回字符串的生存期由
\u bstr\t
内部管理

请参阅实现中的以下代码段:

// Extract a const char_t*
//
inline _bstr_t::operator const char*() const throw(_com_error)
{
    return (m_Data != NULL) ? m_Data->GetString() : NULL;
}

inline const char* _bstr_t::Data_t::GetString() const throw(_com_error)
{
    if (m_str == NULL) {
        m_str = _com_util::ConvertBSTRToString(m_wstr);

        if (m_str == NULL && m_wstr != NULL) {
            _com_issue_error(E_OUTOFMEMORY);
        }
    }

    return m_str;
}

inline void _bstr_t::Data_t::_Free() throw()
{
    if (m_wstr != NULL) {
        ::SysFreeString(m_wstr);
    }

    if (m_str != NULL) {
        delete [] m_str;
    }
}
使用未命名的
\u bstr\u t
也可以,如下所示,因为
\u bstr\u t
实例在
CString
的构造函数完成后被销毁

CString abc((LPCTSTR)_bstr_t(OLESTR("ABC")));
AfxMessageBox(abc);