了解CComBSTR赋值运算符

时间:2010-08-24 18:54:59

标签: c++ string

说我有以下内容:

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

myCComBSTR是否取得myBSTR的所有权并在超出范围时将其释放?或者是否会复制myBSTR并在我免费myBSTR时产生内存泄漏?

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

1 个答案:

答案 0 :(得分:11)

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

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

CComBSTR myCComBSTR = L"MYBSTR";

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

CComBSTR myCComBSTR;
myCComBSTR.Attach(myBSTR);