【问题标题】:What's the difference between BSTR and _bstr_t?BSTR 和 _bstr_t 有什么区别?
【发布时间】:2010-09-25 09:11:04
【问题描述】:

谁能解释上面提到的类型之间的区别以及一些示例用法以清楚地解释两者之间的区别?

任何帮助将不胜感激! 注意:这个问题是从this other question 衍生出来的

【问题讨论】:

    标签: c++ com smart-pointers


    【解决方案1】:

    BSTR 是用于 COM 的字符串数据类型。

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        _bstr_t 包装了 BSTR 类型。因此,当您实例化一个 _bstr_t 时,您也在创建 BSTR。 _bstr_t 只是简单地为你包装好所有东西,对 BSTR 来说有点像“智能指针”。

        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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-09-15
          • 1970-01-01
          • 2010-10-02
          • 2011-12-12
          • 2010-09-16
          • 2012-03-14
          • 2012-02-06
          • 2011-02-25
          相关资源
          最近更新 更多