【发布时间】:2021-03-20 13:10:58
【问题描述】:
我是 C++ 新手,所以请多多包涵。我知道_bstr_t 只是BSTR 的包装类,但正如MSDN 文档中所见,_bstr_t 没有将自身转换为BSTR 的运算符。
那么我可以将_bstr_t 对象传递给期望BSTR 作为参数的函数吗?它安全吗?
或者有没有更好的方法来做到这一点?我特别不希望有任何内存泄漏。
我看过很多文章,所以对此感到困惑。对不起,如果这是一个微不足道的问题。
【问题讨论】:
我是 C++ 新手,所以请多多包涵。我知道_bstr_t 只是BSTR 的包装类,但正如MSDN 文档中所见,_bstr_t 没有将自身转换为BSTR 的运算符。
那么我可以将_bstr_t 对象传递给期望BSTR 作为参数的函数吗?它安全吗?
或者有没有更好的方法来做到这一点?我特别不希望有任何内存泄漏。
我看过很多文章,所以对此感到困惑。对不起,如果这是一个微不足道的问题。
【问题讨论】:
_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,则转换将完成;并且我想认为我展示的 声明 的两个运算符的 实现 将是“安全的”。