CComBSTR内存管理

时间:2012-08-16 07:35:46

标签: visual-c++ mfc atl bstr

我在下面的场景中使用CComBSTR,

void MyDlg::OnTimer()
{

      ......

      CComBSTR statusString1 = ::SysAllocString(_T("Test"));

      ....

}

定时器将在每5秒钟内执行一次。

在上述情况下,每5秒就会增加一次。根据我的理解,当CComBSTR超出范围时,它会清理内存。因此,只要计时器结束,就必须释放分配的内存。但事实并非如此。

我需要了解何时在使用CCOMBSTR时释放内存。

1 个答案:

答案 0 :(得分:2)

您使用CComBSTR是错误的。 CComBSTR正在复制已分配的字符串,而不是取得它的所有权。您可以像这样初始化您的CComBSTR:

CComBSTR statusString1( L"Test" );

如果您想取得之前分配的字符串的所有权,请执行以下操作:

BSTR bstrAlloc = ::SysAllocString(_T("Test"));
... Your Code ...
CComBSTR status;
status.Attach( bstrAlloc );

然后当CComBSTR超出范围时,它将销毁分配的字符串。

更多信息:我建议您查看atlcomcli.h中的CComBSTR实现(通常位于C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ atlmfc \ include文件夹中)。这并不复杂。