When you create BSTRs and pass them between COM objects, you must take care in treating the memory they use in order to avoid memory leaks. When a BSTR stays within an interface, you must free its memory when you are done with it. However, when a BSTR passes out of an interface, the receiving object takes responsibility for its memory management.
In general, the rules for allocating and releasing memory allocated for BSTRs are as follows:
1. When you call into a function that expects a BSTR argument, you must allocate the memory for the BSTR before the call and release it afterwards. For example:
2. When you call into a function that returns a BSTR, you must free the string yourself. For example:
3. When you implement a function that returns a BSTR, allocate the string but do not free it. The receiving the function releases the memory. For example:
http://msdn.microsoft.com/en-us/library/xda6xzx7.aspx