QEvent所有权

一笔贿赂

我想将预定义和自定义都发送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?
达兹韦尔

事件=&stackevent; //有效的 ??

通常这并不安全,但是在这种情况下它是有效的,因为在notify某人处理(或不处理)该事件之前,该函数不会返回(这意味着stackevent在此操作中将“激活”)。

删除heapevent;//有效的?或失去所有权?

是的,这也是有效的,因为通常没有人应该持有指向QEvent的指针(当然要删除它)并且顺便说一句,它已经被处理了。

使用时情况将发生重大变化postEvent

该事件必须在堆上分配,因为发布事件队列将拥有该事件的所有权,并在发布后将其删除。发布事件后,访问该事件是不安全的。

好吧,我想在您的情况下使用堆栈分配并在出现任何可能的问题(将自动释放内存)的情况下将指针传递给它更合适。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章