Giả sử một phương thức từ giao diện COM trả về giá trị BSTR. Tôi có đúng trong quan điểm của tôi rằng tôi phải giải phóng nó?Ai sở hữu BSTR?
Ví dụ mã tại http://msdn.microsoft.com/en-us/library/aa365382(VS.85).aspx không làm điều đó.
Ai sai?
Giả sử một phương thức từ giao diện COM trả về giá trị BSTR. Tôi có đúng trong quan điểm của tôi rằng tôi phải giải phóng nó?Ai sở hữu BSTR?
Ví dụ mã tại http://msdn.microsoft.com/en-us/library/aa365382(VS.85).aspx không làm điều đó.
Ai sai?
Mẫu MSDN sai. Người gọi giải phóng ra và vào/ra bstrs. Nếu nó vào/ra bạn phải vượt qua trong null hoặc một bstr hợp lệ. Nếu nó chỉ ra, nó không phải được khởi tạo.
Nó không phải siêu rõ ràng từ số com allocation rules của msdn, nhưng sơ đồ khách hàng phân bổ bộ nhớ trên các giá trị ra sao cho từ quan điểm của người gọi mà máy chủ đã làm. Ai khác có thể giải phóng nó nhưng người gọi?
Tony đúng nhưng tôi muốn mở rộng câu trả lời của anh ấy. Tình hình không chỉ giới hạn ở một BSTR. Người gọi có trách nhiệm giải phóng bất kỳ bộ nhớ nào được trả về thông qua các tham số ra hoặc vào/ra.
Tôi luôn thấy thuận tiện khi sử dụng '_bstr_t' thay vì giao dịch trực tiếp với' BSTR'. – wilx
vâng, nhưng không phải ai cũng sẵn sàng bị mắc kẹt với Visual Studio. –