说我有以下内容:
BSTR myBSTR = SysAllocString( L"MYBSTR" );
CComBSTR myCComBSTR = myBSTR;
myCComBSTR
是否取得myBSTR
的所有权并在超出范围时将其释放?或者是否会复制myBSTR
并在我免费myBSTR
时产生内存泄漏?
如果这会产生内存泄漏,那么处理此问题的最有效方法是什么? (myBSTR
将作为BSTR
传递给函数,我想将其作为CComBSTR
内部存储
答案 0 :(得分:11)
在这种情况下,CComBSTR
实例会创建一个独立的副本。您需要手动释放myBSTR
以避免泄密。
修复此方案的最简单方法是跳过中间人SysAllocString
函数
CComBSTR myCComBSTR = L"MYBSTR";
另一方面,如果您有一个BSTR
,并希望拥有CComBSTR
船主,请使用附加方法。此方法将资源的所有权从源BSTR
转移到CComBSTR
实例。
CComBSTR myCComBSTR;
myCComBSTR.Attach(myBSTR);