itk::SmartPointer 是如何转换为布尔值的

How is the itk::SmartPointer converted to bool?

本文关键字:转换 布尔值 SmartPointer 何转换 itk      更新时间:2023-10-16

ITK库使用的智能指针可以隐式转换为bool,例如在if子句中。这非常方便,但我想确定它是如何工作的。我的猜测是C++使用提供的operator==与 0 进行比较,但我找不到任何描述此行为的文档。这真的是怎么回事吗?这是该类的Doxygen页面,适合那些可能发现它比代码本身更方便的人。

此转换运算符

   operator ObjectType *() const
        { return m_Pointer; }

允许隐式转换为指针类型,而指针类型又可以转换为 bool

虽然它有效,但这通常被认为是一个坏主意:如果你不小心,你可能会意外地存储一个非智能指针,当智能指针破坏其对象时,它可能会失效。出于这个原因,标准智能指针具有允许在布尔上下文中使用的explicit operator bool(),以及一个显式get()函数,用于当您真正需要非智能指针时。