软件注册站
热情软件屋

 
BSTR指向的对象如何释放
编号: QA004850    
建立日期: 2004年2月5日 最后修改日期: 2004年2月5日
所属类别: C/C++ - 其他方面
   
    操作系统:windows
    编程工具:MFC
    问题:我编的程序里用到了下列语句:
     BSTR bsName;
    
pLastNode->get_text(&bsName);//pLastNode为指向结点的指针
    
    
程序出现了内存泄漏,经查,是bsName未释放,请教大家,BSTR指向的对象如何释放?(msdn中说明BSTR是32位的指针)
    水平: 刚入门(陈强)
   
    一、先说说我觉得应该如何做:
    BSTR bsName = NULL;
    
pLastNode->get_text(&bsName);//pLastNode为指向结点的指针
    
//使用bsName的代码(略)
    
....
    
//释放bsName字符串占用的内存
    
SysFreeString(bsName);
    
    

    二、一些解释:
    (1)BSTR类型是COM中使用的标准字符串类型。它其实是一个32位指针,保存字符串首字符的地址。既然是指针类型,好的习惯应该是在定义一个BSTR类型变量时立刻初始化为NULL,即使随后立刻就会对其进行赋值。
    (2)pLastNode->get_text(BSTR* pstrText)方法内部为返回的字符串分配了内存资源,并将该字符串的地址bsName变量中。
    (3)外部使用者pLastNode->get_text方法的调用者必须自己调用SysFreeString(BSTR bstr)方法释放BSTR类型字符串占用的资源。
    MSDN中用关于BSTR和其他字符串类型的更详细的叙述。
    
    birdie的意见:
    把BSTR改为CComBSTR,CComBSTR是经过包装的宏,可以自动释放内存。

    

此问题由刘铁刚等回答。

附加关键字:编程, 源程序, programming, source code, C/C++, MFC, C++ Builder, Borland C++, Turbo C, C, BCB, 其他方面,

   
 
把这个问题推荐给朋友
   
 
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio