将 _bstr_t 对象传递给期望 BSTR 作为参数的函数是不是安全?
Posted
技术标签:
【中文标题】将 _bstr_t 对象传递给期望 BSTR 作为参数的函数是不是安全?【英文标题】: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
作为参数的函数吗?它安全吗?
或者有没有更好的方法来做到这一点?我特别不希望有任何内存泄漏。
我看过很多文章,所以对此感到困惑。对不起,如果这是一个微不足道的问题。
【问题讨论】:
【参考方案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
,则转换将完成;并且我想认为我展示的 声明 的两个运算符的 实现 将是“安全的”。以上是关于将 _bstr_t 对象传递给期望 BSTR 作为参数的函数是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章