Understanding CComBSTR assignment operators

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)

7
задан David A. 24 August 2010 в 18:54
поделиться

1 ответ

В этом случае экземпляр CComBSTR создает независимую копию. Вам нужно будет вручную освободить myBSTR , чтобы избежать утечки.

Самый простой способ исправить этот сценарий - пропустить функцию среднего человека SysAllocString

CComBSTR myCComBSTR = L"MYBSTR";

С другой стороны, если у вас есть BSTR и вы хотите получить CComBSTR возьмите его в собственность, затем используйте метод присоединения. Этот метод передает право собственности на ресурс от источника BSTR экземпляру CComBSTR .

CComBSTR myCComBSTR;
myCComBSTR.Attach(myBSTR);
11
ответ дан 6 December 2019 в 22:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: