Comparing CComBSTR to NULL
Comparing CComBSTR to NULL
最近,我正在编写一个代码,发现了以下代码:
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时,没有任何问题。祝你好运
相关文章:
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- C++ Singleton - Prevent ::instance() to variable
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- Visual Studio Code "undefined reference to `WinMain@16'"
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 如何在 c++ 中'NULL'字符串
- 如何解决"invalid conversion from 'char' to 'const char*'"
- c++使用foreach使数组为null
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- visual Redirect stdout/stderr to null vs2017 c++
- 如何修复"reference cannot be bound to dereferenced null pointer"警告
- MFC Web 浏览器.导航错误"A null reference pointer was passed to the stub."
- C++ : NULL changing to 0
- Is it safe to #define NULL nullptr?
- 静态库调用错误:异常:"A null reference pointer was passed to the stub."(使用 winsock2 Win32)
- Comparing CComBSTR to NULL
- 如何摆脱 - "warning: converting to non-pointer type 'char' from NULL" ?
- UNICODE_STRING to wchar_t* null terminated