将CComBSTR与NULL进行比较

时间:2013-05-10 05:45:16

标签: c++ com smart-pointers bstr

最近,我正在编写代码并找到以下代码:

CComBSTR userName;
SUCCEED(getUserName(userName));
if(userName == NULL) ...

最后一行警告我,因为我正在将一个对象与NULL进行比较,这不是直观的。但是在浏览MSDN之后,它得到了完美的支持:

bool operator ==( const CComBSTR& bstrSrc ) const throw( ); 
bool operator ==( LPCOLESTR pszSrc ) const; 
bool operator ==( LPCSTR pszSrc    ) const;     
bool operator ==(  int nNull  ) const throw( );

所以我的问题是,为什么CComBSTR的API设计允许进行这样的比较?只是为了更容忍错误?

2 个答案:

答案 0 :(得分:1)

智能指针的设计旨在尽可能模仿原始指针,只需提供自动内存管理,但对外部代码透明。这意味着覆盖->=&运算符,实现转换操作等。这样,其余代码可以将智能指针视为真正的指针在几乎所有方面。

想象一下有人开始使用此代码:

BSTR userName;
SUCCEED(getUserName(&userName));
if(userName == NULL) ...

然后想升级到智能指针:

CComBSTR userName;
SUCCEED(getUserName(&userName));
if(userName == NULL) ...

看看它是如何工作的?只有一行改变了。

答案 1 :(得分:0)

首先,您应该找到类CComBSTR的定义,以确认您是否使用Windows系统API而不是您自己的方法。当我们开发COM时,也许您的开发系统重新定义了Class。当我使用Windows的API时,没有问题。祝你好运