我希望将预定义的和自定义的QEvent发送到Qt应用程序。是否需要在堆上分配事件,还是只需将指针传递到堆栈上的对象?
QKeyEvent stackevent(QEvent::KeyPress);
QKeyEvent* heapevent = new QKeyEvent(QEvent::KeyPress);
QEvent * event;
event = &stackevent; //valid ??
event = heapevent;
QCoreApplication()->notify(someobj, event);
delete heapevent; //valid? or lost ownership?发布于 2015-06-17 15:28:20
事件= &stackevent;//有效??
通常这是不安全的,但在本例中它是有效的,因为函数notify不会返回,直到某个人处理(或不处理)事件(这意味着stackevent将在此操作期间“活着”)。
删除堆;//有效?还是失去了所有权?
是的,这也是有效的,因为通常没有人应该保存指向QEvent的指针(当然是删除它),顺便说一句,它已经被处理了。
使用时,的情况会发生显著变化:
事件必须是在堆上分配的,因为post事件队列将获得事件的所有权,并在事件发布后删除它。发布事件后访问该事件是不安全的。
嗯,我想在您的情况下使用堆栈分配并在发生任何可能的问题时传递指向它的指针更合适(内存将自动释放)。
https://stackoverflow.com/questions/30895304
复制相似问题