c++ - 了解 CComBSTR 赋值运算符

标签 c++ string

假设我有以下内容:

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

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

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

最佳答案

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

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

CComBSTR myCComBSTR = L"MYBSTR";

另一方面,如果您有一个 BSTR 并且想要一个 CComBSTR 取得它的所有权,那么请使用附加方法。此方法将资源的所有权从源 BSTR 转移到 CComBSTR 实例。

CComBSTR myCComBSTR;
myCComBSTR.Attach(myBSTR);

关于c++ - 了解 CComBSTR 赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3559990/

相关文章:

c++ - 如何将非静态类成员 `std::bind` 转换为 Win32 回调函数 `WNDPROC`?

c++ - 通过 libssh 发送文件 (ssh_scp_push_file && ssh_scp_write)

Python:从字符串元组中获取第一个元素

java - Android:如何将空的 EditText 字段排除在随机计数之外?

c++ - 当我声明字符串数组时,C++ 如何计算偏移地址

c++ - 为什么这里调用的是 Copy Constructor 而不是普通的 Constructor 和重载的赋值运算符?

c++ - 在 Xcode 中传递指针时出错,但在 Windows 上的 Codeblocks 中有效

c++ - 将 Char 指针中的十六进制转换为十进制

regex - 如何在 R 中 str_extract 百分比?

objective-c - 使用 NSScanner 删除字符串中的注释?