说我有以下几点:

BSTR myBSTR = SysAllocString( L"MYBSTR" );
CComBSTR myCComBSTR = myBSTR;
myCComBSTR 是否拥有 myBSTR 的所有权并在它超出范围时释放它?或者如果我不释放 myBSTR ,它是否会复制 myBSTR 并产生内存泄漏?

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

最佳答案

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

解决这种情况的最简单方法是跳过中间人 SysAllocString 函数

CComBSTR myCComBSTR = L"MYBSTR";

另一方面,如果你有一个 BSTR 并且想要一个 CComBSTR 拥有它,那么使用 attach 方法。此方法将资源的所有权从源 BSTR 转移到 CComBSTR 实例。
CComBSTR myCComBSTR;
myCComBSTR.Attach(myBSTR);

10-08 08:20