0
smart pointer used by the ITK library的可以隐式转换到bool
,例如在if
子句。这很方便,但我想确定它是如何工作的。我的猜测是C++使用提供的operator==
来比较0,但我找不到描述此行为的任何文档。这是真的吗? Here是该类的Doxygen页面,适用于可能比代码本身更方便的人。itk :: SmartPointer如何转换为bool?
smart pointer used by the ITK library的可以隐式转换到bool
,例如在if
子句。这很方便,但我想确定它是如何工作的。我的猜测是C++使用提供的operator==
来比较0,但我找不到描述此行为的任何文档。这是真的吗? Here是该类的Doxygen页面,适用于可能比代码本身更方便的人。itk :: SmartPointer如何转换为bool?
这种转换算子
operator ObjectType *() const
{ return m_Pointer; }
允许隐式转换为指针类型,这又可以被转化为bool
。
虽然它的工作原理,这被普遍认为是一个坏主意:如果你不小心,你可能会意外地存储在非智能指针,容易失效时,智能指针会破坏它的对象。由于这个原因,标准的智能指针代替explicit operator bool()
允许在布尔上下文中使用,并且当你真的想要一个非智能指针时,可以使用明确的get()
函数。
非常感谢。我确实看到了隐式转换为原始指针的危险,但至少现在我知道了。 – 2014-10-01 09:15:25