【发布时间】:2011-09-05 02:55:02
【问题描述】:
我使用的是 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类定义。 -
@bacchus,请注意您的
(HWND))编辑错误:D 虽然改进后的间距很好...... -
@sarnold 额外的括号来自句子。我错过了。谢谢你的警告;)
-
请提供
Wnd的定义。没有它,这个问题就完全无法回答。 -
-1。这是一个不好的问题。提问时应该学会发布相关代码。
标签: c++ conditional destructor operator-keyword conditional-operator