Allocating and Releasing Memory for a BSTR
For the latest documentation on Visual Studio 2017, see Visual Studio 2017 Documentation.
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:
When you call into a function that expects a
BSTRargument, you must allocate the memory for the
BSTRbefore the call and release it afterwards. For example:
When you call into a function that returns a
BSTR, you must free the string yourself. For example:
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: