Ограничения условного оператора?:

Я использую 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;}
    }
6
задан Daniel Daranas 27 June 2013 в 13:26
поделиться