2010-08-24 32 views
7

aşağıdakileri sorunum Say? Veya myBSTR'un bir kopyasını oluşturuyor ve myBSTR'u ücretsiz kullanmıyorsam bir bellek sızıntısı mı yapıyor?anlama CComBSTR atama operatörleri

Bu bir bellek sızıntısı ortaya çıkarırsa, bunu işlemenin en etkili yolu nedir? (myBSTR bir BSTR gibi bir işleve geçirilen ve ben içten bir CComBSTR olarak saklamak istediğiniz edilecektir) CComBSTR örneği bağımsız kopyasını oluşturur Bu durumda

cevap

11

. Sızıntıyı önlemek için manuel olarak myBSTR'u serbest bırakmanız gerekecektir.

Bu senaryoyu düzeltmek için en basit yaklaşım bir BSTR ve daha sonra attach yöntemini kullanmak bunun bir CComBSTR almak sahibinin gemiyi yapmak istiyorsanız Öte yandan SysAllocString fonksiyonu orta adama

CComBSTR myCComBSTR = L"MYBSTR"; 

atlamak etmektir . Bu yöntem, kaynağın sahipliğini kaynağından CComBSTR örneğine aktarır.

CComBSTR myCComBSTR; 
myCComBSTR.Attach(myBSTR); 
+1

CComBSTR :: Attach ve CComBSTR :: AssignBSTR arasındaki fark nedir? –

+0

@ mvdavid7, AssignBSTR mülkiyeti devretmez ve sadece bir kopyasını yapar. Sahipliği "CComBSTR" öğesine aktarır ve kopyalamaz. – JaredPar

İlgili konular