0

最近,我正在编写代码并发现以下代码:

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( );

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

4

2 回答 2

1

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

想象一下有人从这段代码开始:

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

然后想升级为智能指针:

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

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

于 2013-05-10T08:18:19.527 回答
0

First you should find the definition of the class CComBSTR to confirm whether you use the windows system API not your own method. When we develop COM, maybe your development system redefine the Class. when I use the API of the windows, there is no problem. good luck

于 2013-05-10T07:11:19.897 回答