다음을 통해 공유


할당 하 고 메모리를 BSTR 해제

만들 때 BSTRs 및 해당 COM 개체 간에 전달, 메모리 누수를 방지 하기 위해 사용 하는 메모리 처리에 주의 해야 합니다.경우는 BSTR 상태로 인터페이스 내에서 사용 해야 자유 메모리에 작업이 완료 되 면.그러나, 경우는 BSTR 가공 인터페이스에서 받는 개체는 메모리 관리에 대 한 책임.

일반적으로 할당 하 고 메모리를 해제 하는 방법에 대 한 규칙에 할당 된 BSTRs는 다음과 같습니다.

  • 필요한 함수를 호출 하면는 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);
    }
    

참고 항목

참조

CStringT::AllocSysString

SysAllocString

SysFreeString

기타 리소스

문자열 (ATL/MFC)