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)
В этом случае экземпляр CComBSTR
создает независимую копию. Вам нужно будет вручную освободить myBSTR
, чтобы избежать утечки.
Самый простой способ исправить этот сценарий - пропустить функцию среднего человека SysAllocString
CComBSTR myCComBSTR = L"MYBSTR";
С другой стороны, если у вас есть BSTR
и вы хотите получить CComBSTR
возьмите его в собственность, затем используйте метод присоединения. Этот метод передает право собственности на ресурс от источника BSTR
экземпляру CComBSTR
.
CComBSTR myCComBSTR;
myCComBSTR.Attach(myBSTR);