Mengalokasikan dan Melepaskan Memori untuk BSTR
Ketika Anda membuat BSTR
s dan meneruskannya di antara objek COM, Anda harus berhati-hati dalam memperlakukan memori yang mereka gunakan untuk menghindari kebocoran memori. Ketika tetap berada BSTR
dalam antarmuka, Anda harus membebaskan memorinya ketika Anda selesai dengannya. Namun, ketika pingsan BSTR
dari antarmuka, objek penerima bertanggung jawab atas manajemen memorinya.
Secara umum, aturan untuk mengalokasikan dan merilis memori yang dialokasikan untuk BSTR
s adalah sebagai berikut:
Ketika Anda memanggil ke fungsi yang mengharapkan
BSTR
argumen, Anda harus mengalokasikan memori untukBSTR
sebelum panggilan dan melepaskannya setelahnya. Contohnya: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); }
Ketika Anda memanggil ke fungsi yang mengembalikan
BSTR
, Anda harus membebaskan string sendiri. Contohnya: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);
Saat Anda menerapkan fungsi yang mengembalikan
BSTR
, alokasikan string tetapi jangan bebaskan. Fungsi penerima melepaskan memori. Contohnya: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); }
Lihat juga
String (ATL/MFC)
CStringT::AllocSysString
SysAllocString
SysFreeString