我正在使用GCC 4.5並觀察到非常奇怪的行爲。我想知道這個操作符是否有一些我不完全理解的東西。我認爲我精通C++。 我有一個瘦C++包裝類Wnd
對於Windows HWND
對象與實施投型運算符operator HWND ...
。有條件運算符的侷限性?:
如果我使用條件運算符是這樣的(給定輸入Wnd *p
和樣本功能SetParent(HWND))
:。
SetParent((p!=NULL) ? (HWND)(*p) : NULL)
父已正確設置爲NULL
或p
取決於這就是我所期待 但是,如果敢偷懶,寫:
SetParent(p ? *p : NULL)
東西就會失控 運行GDB後,我發現,調用析構函數在瓦里在致電SetParent
後能夠致電p
。 有什麼想法發生在這裏?
編輯 這裏是我的Wnd中類:
class Wnd{
HWND m_hwnd; ///< the actual handle
WndFake *fake; ///< store state here if we do not have a handle
public:
virtual ~Wnd();
//contructor s
Wnd(HWND wnd=NULL):m_hwnd(wnd),fake(NULL){}
Wnd(DWORD sty,const jchar *title,const RECT &sz);
operator HWND(){return m_hwnd;}
operator HWND() const {return m_hwnd;}
}
你很可能會需要出示完整的'Wnd'類定義。 – 2011-05-31 00:14:07
@bacchus,注意你的'(HWND))'編輯錯了:d雖然改進間距不錯... – sarnold 2011-05-31 00:17:18
@sarnold額外的支架是從句子。我錯過了。感謝您的警告;) – bacchus 2011-05-31 00:20:57