You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

由CString::AllocSysString()生成的BSTR需手动释放还是由COM对象释放?

BSTR内存释放问题解答

代码片段

/* Code Snippet */
CString pString;
pString.Format("LoginWhite : %s",IP.GetString());
BSTR szRuleFind = pString.AllocSysString();
// Check for Existing Rule
HRESULT hr = pRules->Item(szRuleFind,&pFind);
SysFreeString(szRuleFind);

问题

由CString::AllocSysString()生成的BSTR,是像上述代码这样调用SysFreeString()手动释放,还是在释放INetFwRules*类型的COM对象(调用::Release())时由该对象负责释放?

解答

必须像代码里这样手动调用SysFreeString()释放这个BSTR,原因如下:

  • CString::AllocSysString()本质是调用COM标准的SysAllocString分配内存,遵循COM谁分配谁释放的内存管理原则。
  • INetFwRules::Item方法仅读取传入的BSTR内容,不会接管该BSTR的所有权,因此分配BSTR的代码需要自行负责释放。
  • 释放INetFwRules*对象时,只会清理该COM对象自身的内部资源,不会处理你传入的这个BSTR——它不属于该COM对象的管理范畴。

内容的提问来源于stack exchange,提问作者Azriel Elijay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 09:36:10