【问题标题】:Is it safe to pass a _bstr_t object to a function expecting BSTR as argument?将 _bstr_t 对象传递给期望 BSTR 作为参数的函数是否安全?
【发布时间】:2021-03-20 13:10:58
【问题描述】:

我是 C++ 新手,所以请多多包涵。我知道_bstr_t 只是BSTR 的包装类,但正如MSDN 文档中所见,_bstr_t 没有将自身转换为BSTR 的运算符。

那么我可以将_bstr_t 对象传递给期望BSTR 作为参数的函数吗?它安全吗?

或者有没有更好的方法来做到这一点?我特别不希望有任何内存泄漏。

我看过很多文章,所以对此感到困惑。对不起,如果这是一个微不足道的问题。

【问题讨论】:

    标签: c++ msdn bstr


    【解决方案1】:

    _bstr_t 没有将自身转换为 BSTR 的运算符

    是和不是。 BSTR被定义为等同于“afx.h”头文件中的wchar_t*

    typedef _Null_terminated_ LPWSTR BSTR;
    

    _bstr_t 类(在“comutil.h”中)确实有用于此的转换运算符,有或没有const 限定符,如:

    class _bstr_t {
    public:
    //...
    //...
        // Extractors
        //
        operator const wchar_t*() const throw();
        operator wchar_t*() const throw();
    //...
    

    编辑:但来自documentation for those operators 的一个小“注意事项”:

    为返回的指针分配一个新值不会修改 原始 BSTR 数据。

    【讨论】:

    • 那么我将 _bstr_t 对象作为参数传递而不担心任何泄漏或问题对我来说是否安全??
    • @RajaShekar 是的!如果函数参数应该是BSTR,则转换将完成;并且我想认为我展示的 声明 的两个运算符的 实现 将是“安全的”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多