Aracılığıyla paylaş


Tahsis etme ve belleği serbest bstr için

Oluşturduğunuzda, BSTRs ve com nesneleri arasında geçmesi, size kullanmak bellek sızıntılarını önlemek için bellek değerlendirmesini de dikkatli olmalıdır.Zaman bir BSTR bir arabirim içinde kalır, size gereken serbest kendi bellek ile iþiniz bittiðinde.Bununla birlikte, ne zaman bir BSTR geçişleri dışarı yönde alıcı nesne kendi bellek yönetimi için sorumluluk alır.

Genel olarak, için tahsis etme ve bellek serbest bırakma kurallarını tahsis BSTRs aşağıdaki gibidir:

  • Beklediği işlev aradığınızda bir BSTR bağımsız değişkeni, size gerekir ayırmak için gereken bellek BSTR çağrısından önce ve daha sonra bırakın.Örne?in:

    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);
    }
    
  • Döndüren bir işlev çağrısı ne zaman bir BSTR, kendinizi dize boşaltmalısınız.Örne?in:

    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);
    
  • Döndüren bir işlev uygulamak ne zaman bir BSTR, dize ayırır, ancak boş değil.Alma işlevi belleği serbest bırakır.Örne?in:

    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);
    }
    

Ayrıca bkz.

Başvuru

CStringT::AllocSysString

SysAllocString

SysFreeString

Diğer Kaynaklar

Dizeler (atl/mfc)