CComBSTR和_bstr_t的关联与区别

出处: http://blog.sina.com.cn/s/blog_570379cc0100n87s.html 

CComBSTR, _bstr_t 使用原则

1. 二者都是对BSTR进行操作的智能指针,提供了一些功能来方便地操作BSTR,
CComBSTR  是ATL对BSTR的包装
_bstr_t   是vc 对BSTR的包装

使用二者都可以,
如果考虑到减少组件的大小,那么建议使用CComBSTR   ,
如果考虑到功能的方便性,  建议使用   _bstr_t   

2.
使用   _bstr_t   需要加上如下的头文件:
#include   "comdef.h "
#include   "comutil.h "

3.

CComBSTR用在服务器端,_bstr_t用在客户端
不过有时候在服务器端用CComBSTR没有错,用_bstr_t就有

4.

_bstr_t会抛出异常,CComBSTR不会

 

5.

内存泄漏问题

将已初始化的 CComBSTR 的地址作为 [out] 参数传递到函数会导致内存泄漏。

在下面的示例中,在函数 OutString 替换为了保存字符串 "Initialized" 而分配的字符串时,该字符串被泄漏。

CComBSTR bstrLeak(L"Initialized");
HRESULT hr = OutString(&bstrLeak);

若要避免泄漏,请在作为 [out] 参数传递地址之前,对现有的 CComBSTR 对象调用 Empty 方法。

请注意,如果函数的参数是 [in, out],则同样的代码将不会导致泄漏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值