分配和释放 BSTR 的内存
2012-09-05 09:28
351 查看
【转自】/article/5137001.html
当创建 BSTR 并在 COM 对象之间传递它们时,必须小心地处理它们所使用的内存以避免内存泄漏。当 BSTR 停留在接口中时,在完成其使用后必须释放出它的内存。但是,如果 BSTR 传递出了接口,那么接收对象将负责它的内存管理。
一般情况下,分配和释放分配给 BSTR 的内存的规则如下:
当调用进来一个需要 BSTR 参数的函数时,必须在调用之前为 BSTR 分配内存,并且在完成操作之后将其释放。例如:
当调用进来一个返回 BSTR 的函数时,必须自己来释放字符串。例如:
当实现返回 BSTR 的函数时,请分配字符串,但不要释放它。接收函数会释放内存。例如:
当创建 BSTR 并在 COM 对象之间传递它们时,必须小心地处理它们所使用的内存以避免内存泄漏。当 BSTR 停留在接口中时,在完成其使用后必须释放出它的内存。但是,如果 BSTR 传递出了接口,那么接收对象将负责它的内存管理。
一般情况下,分配和释放分配给 BSTR 的内存的规则如下:
当调用进来一个需要 BSTR 参数的函数时,必须在调用之前为 BSTR 分配内存,并且在完成操作之后将其释放。例如:
HRESULT IWebBrowser2::put_StatusText( BSTR bstr ); // shows using the Win32 function // to allocate memory for the string: BSTR bstrStatus = ::SysAllocString( L"Some text" ); if (bstrStatus == NULL) return E_OUTOFMEMORY; pBrowser->put_StatusText( bstrStatus ); // Free the string: ::SysFreeString( bstrStatus ); //...
当调用进来一个返回 BSTR 的函数时,必须自己来释放字符串。例如:
HRESULT IWebBrowser2::get_StatusText( BSTR FAR* pbstr ); //... BSTR bstrStatus; pBrowser->get_StatusText( &bstrStatus ); // shows using the Win32 function // to freee the memory for the string: ::SysFreeString( bstrStatus );
当实现返回 BSTR 的函数时,请分配字符串,但不要释放它。接收函数会释放内存。例如:
// Example shows using MFC's // CString::AllocSysString //... 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 ); } //...
相关文章推荐
- 分配和释放 BSTR 的内存(msdn)
- 分配和释放 BSTR 的内存
- 分配和释放 BSTR 的内存
- 摘:分配和释放BSTR的内存
- 分配和释放 BSTR 的内存 2011-12-1 10:19
- BSTR 的内存分配和释放
- 分配和释放 BSTR 的内存
- 分配和释放 BSTR 的内存
- 一个简单模拟内存分配和释放的实现
- 自由存储区内存的分配与释放
- 【百度分享】频繁分配释放内存导致的性能问题的分析 .
- C与C++中动态分配与释放内存的区别
- C/C++动态分配与释放内存的区别详细解析
- Linux C/C++ 内存分配与释放 [摘抄整理]
- c与c++分别是怎样动态分配和释放内存的,有什么区别?
- 指向指针的指针的内存分配与释放
- delphi 指针的内存分配和释放
- Delphi中内存的动态分配与释放
- malloc(0)参数为0的情况,malloc分配最小空间,free真的释放内存了?
- TCMalloc的使用与源码剖析之八---------TCMalloc内存分配与释放的管理之内存泄露检查