我正在使用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