为 BSTR
分配和释放内存
创建 BSTR
并在 COM 对象之间传递它们时,必须注意处理它们使用的内存,以避免内存泄漏。 BSTR
在接口中停留时,你必须在使用完之后释放其内存。 但是,当接口传出 BSTR
时,接收对象负责其内存管理。
一般情况下,分配和释放为 BSTR
分配的内存的规则如下:
调用需要
BSTR
参数的函数时,必须在调用之前为BSTR
分配内存,并在调用之后释放内存。 例如:HRESULT CMyWebBrowser::put_StatusText(BSTR bstr)
// shows using the Win32 function // to allocate memory for the string: BSTR bstrStatus = ::SysAllocString(L"Some text"); if (bstrStatus != NULL) { pBrowser->put_StatusText(bstrStatus); // Free the string: ::SysFreeString(bstrStatus); }
调用返回
BSTR
的函数时,必须自行释放字符串。 例如:HRESULT CMyWebBrowser::get_StatusText(BSTR* pbstr)
BSTR bstrStatus; pBrowser->get_StatusText(&bstrStatus); // shows using the Win32 function // to free the memory for the string: ::SysFreeString(bstrStatus);
实现返回
BSTR
的函数时,请分配字符串,但不释放它。 接收函数释放内存。 例如:HRESULT CMyClass::get_StatusText(BSTR* pbstr) { try { //m_str is a CString in your class *pbstr = m_str.AllocSysString(); } catch (...) { return E_OUTOFMEMORY; } // The client is now responsible for freeing pbstr. return(S_OK); }
另请参阅
字符串 (ATL-MFC)
CStringT::AllocSysString
SysAllocString
SysFreeString