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 CComBSTRinternally)
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