了解CComBSTR赋值运算符

Dav*_* A. 7 c++ string

说我有以下内容:

BSTR myBSTR = SysAllocString( L"MYBSTR" );
CComBSTR myCComBSTR = myBSTR;
Run Code Online (Sandbox Code Playgroud)

当它超出范围时,是否myCComBSTR取得所有权myBSTR并将其释放?或者,myBSTR如果我不自由,它会复制并产生内存泄漏myBSTR吗?

如果这会产生内存泄漏,那么处理此问题的最有效方法是什么?(myBSTR将作为a传递给函数BSTR,我想将其作为CComBSTR内部存储)

Jar*_*Par 11

在这种情况下,CComBSTR实例会创建一个独立的副本.您需要手动释放myBSTR以避免泄漏.

修复此场景的最简单方法是跳过中间人SysAllocString函数

CComBSTR myCComBSTR = L"MYBSTR";
Run Code Online (Sandbox Code Playgroud)

另一方面,如果你有一个BSTR并希望CComBSTR拥有它的船主,那么使用附加方法.此方法将资源的所有权从源BSTR转移到CComBSTR实例.

CComBSTR myCComBSTR;
myCComBSTR.Attach(myBSTR);
Run Code Online (Sandbox Code Playgroud)