Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Understanding CComBSTR assignment operators

Tags:

c++

string

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)

like image 473
David A. Avatar asked Aug 24 '10 18:08

David A.


1 Answers

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);
like image 51
JaredPar Avatar answered Nov 16 '22 14:11

JaredPar