2010-08-24 36 views
7

Nói rằng tôi có như sau:Hiểu toán tử gán CComBSTR

BSTR myBSTR = SysAllocString(L"MYBSTR"); 
CComBSTR myCComBSTR = myBSTR; 

Có quyền sở hữu myCComBSTR mất của myBSTR và miễn phí nó khi nó đi ra khỏi phạm vi? Hay nó tạo ra một bản sao của myBSTR và tạo ra một rò rỉ bộ nhớ nếu tôi không miễn phí myBSTR?

Nếu điều này tạo ra rò rỉ bộ nhớ, cách hiệu quả nhất để xử lý vấn đề này là gì? (myBSTR sẽ được chuyển vào một hàm dưới dạng BSTR và tôi muốn lưu trữ nó dưới dạng CComBSTR nội bộ)

Trả lời

11

Ví dụ trường hợp CComBSTR tạo bản sao độc lập. Bạn sẽ cần phải tự do myBSTR để tránh rò rỉ.

Phương pháp đơn giản nhất để sửa chữa kịch bản này là để bỏ qua người đàn ông trung SysAllocString chức năng

CComBSTR myCComBSTR = L"MYBSTR"; 

Mặt khác nếu bạn có một BSTR và muốn có một chiếc tàu chủ sở hữu CComBSTR mất của nó sau đó sử dụng đính kèm phương pháp . Phương thức này chuyển quyền sở hữu tài nguyên từ nguồn BSTR sang phiên bản CComBSTR.

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

Sự khác biệt giữa CComBSTR :: Đính kèm và CComBSTR :: AssignBSTR là gì? –

+0

@ mvdavid7, AssignBSTR không chuyển quyền sở hữu và chỉ tạo bản sao. Đính kèm quyền sở hữu chuyển giao cho 'CComBSTR' và không sao chép. – JaredPar

Các vấn đề liên quan