SMSUIMessageEditor在一个地方new出来,但这个new出来的对象,却不是用delete来销毁的。用了个看不懂的deleteLater。
deleteLater、delete这两者有什么区别呢?
- C/C++ code
m_pMessageEditor = new SMSUIMessageEditor (this);void SMSUIMainDlg::onCloseNewMsgDialog (){ qDebug ("%s: %s: Entered", __FILE__, __FUNCTION__); QObject* pObj = QObject::sender (); if (NULL == pObj) { qDebug ("%s: %s: %s %d pObj is NULL ", _TIME_, __FILE__, __FUNCTION__, __LINE__); return; } SMSUIMessageEditor *pDlg = qobject_cast<SMSUIMessageEditor *>(pObj); if (NULL != pDlg) { pDlg->m_pwidgetcreateDlg->deleteLater (); pDlg->deleteLater (); } qDebug ("%s: %s: Exit", __FILE__, __FUNCTION__);}
------解决方案--------------------
据说是因为对象可能在事件循环中存在 不能直接删 而是往消息循环中投递一个消息安全的删除 不然假如还有针对那对象的消息而对象被销毁了的话程序就崩溃了
------解决方案--------------------
就是让窗口在不用后自己手动调用delete删除,