2
_bstr_t::wchar_t*, _bstr_t::char*
operators返回不同類型的字符串。誰擁有_bstr_t :: wchar_t *,_bstr_t :: char *運算符的返回字符串?
我需要delete
或free
他們嗎?使用哪個函數?
_bstr_t::wchar_t*, _bstr_t::char*
operators返回不同類型的字符串。誰擁有_bstr_t :: wchar_t *,_bstr_t :: char *運算符的返回字符串?
我需要delete
或free
他們嗎?使用哪個函數?
在使用調試器執行實施之後,我的結論是,沒有必要手動將返回的字符串delete
/free
。返回字符串的生命週期在內部由_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;
}
}
它也還可以使用無名_bstr_t
如下因爲_bstr_t
實例後的CString
構造已經完成銷燬。
CString abc((LPCTSTR)_bstr_t(OLESTR("ABC")));
AfxMessageBox(abc);