Я использую 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 я обнаружил, что деструктор вызывается для переменной p
после вызова SetParent
.
Есть идеи, что здесь происходит?
Редактировать Вот мой класс 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;}
}