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