Comparing CComBSTR to NULL

Comparing CComBSTR to NULL

本文关键字:NULL to CComBSTR Comparing      更新时间:2023-10-16

最近,我正在编写一个代码,发现了以下代码:

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设计允许这样的比较?只是为了对错误更宽容吗?

智能指针的设计目的是尽可能地模仿原始指针,简单地提供自动内存管理,但对外部代码是透明的。这意味着覆盖->=&操作符,实现转换操作等。这样,其余的代码几乎在所有方面都可以像对待真正的指针一样对待智能指针。

想象某人以以下代码开始:

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

然后想升级到智能指针:

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

明白是怎么回事了吗?

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