BSTR和_bstr_t有什么区别?

时间:2008-12-04 17:37:05

标签: c++ com smart-pointers

有谁可以解释上面提到的类型和一些样本用法之间的区别,以清楚地解释两者之间的区别?

任何帮助都将受到高度赞赏! 注意:此问题是this other question

的衍生产品

3 个答案:

答案 0 :(得分:21)

BSTR是与COM一起使用的字符串数据类型。

_bstr_t是一个类似于智能指针的包装类,因此当变量被销毁或超出范围时,它将释放分配的内存。 _bstr_t也有引用计数,每次通过值传递_bstr_t变量(避免不必要的复制)时都会增加,并在不再使用时递减。每当所有引用都被销毁时,就会释放为该字符串分配的内存。

BSTR的替代方案是CComBSTR。它还管理BSTR的内存,但没有引用计数。

答案 1 :(得分:13)

BSTR 是一个原始指针,而 _bstr_t 是一个封装该指针的类。

char * std :: string 的区别相同。

答案 2 :(得分:10)

_bstr_t包装BSTR类型。因此,当您实例化_bstr_t时,您也在创建BSTR。 _bstr_t只是为你包装所有东西,对BSTR来说就像是一个“聪明的ptr”。

BSTR

http://msdn.microsoft.com/en-us/library/ms221069.aspx

SysAllocString()

http://msdn.microsoft.com/en-us/library/ms891285.aspx

_bstr_t

https://msdn.microsoft.com/en-us/library/zthfhkd6.aspx