Понимание операторов присваивания CComBSTR - PullRequest
7 голосов
/ 24 августа 2010

Скажите, что у меня есть следующее:

BSTR myBSTR = SysAllocString( L"MYBSTR" );
CComBSTR myCComBSTR = myBSTR;

Принимает ли myCComBSTR право собственности на myBSTR и освобождает ли его, когда оно выходит из области видимости?Или он делает копию myBSTR и вызывает утечку памяти, если я не освобождаю myBSTR?

Если это приводит к утечке памяти, какой самый эффективный способ справиться с этим?(myBSTR будет передано функции как BSTR, и я хочу сохранить ее как CComBSTR внутри)

1 Ответ

11 голосов
/ 24 августа 2010

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

Самый простой подход для исправления этого сценария - пропустить посредника SysAllocString function

CComBSTR myCComBSTR = L"MYBSTR";

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

CComBSTR myCComBSTR;
myCComBSTR.Attach(myBSTR);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...