Say I have the following:
BSTR myBSTR = SysAllocString( L"MYBSTR" );
CComBSTR myCComBSTR = myBSTR;
Does myCComBSTR
take ownership of myBSTR
and free it when it goes out of scope? Or does it make a copy of myBSTR
and produce a memory leak if i dont free myBSTR
?
If this produces a memory leak, what's the most efficient way of handling this? (myBSTR
will be passed in to a function as a BSTR
and i want to store it as a CComBSTR
internally)
In this case the CComBSTR
instance creates an independent copy. You will need to manually free myBSTR
to avoid a leak.
The simplest approach to fix this scenario is to skip the middle man SysAllocString
function
CComBSTR myCComBSTR = L"MYBSTR";
On the other hand if you have a BSTR
and want to have a CComBSTR
take owner ship of it then use attach method. This method transfers ownership of the resource from the source BSTR
to the CComBSTR
instance.
CComBSTR myCComBSTR;
myCComBSTR.Attach(myBSTR);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With