繁体   English   中英

QEvent所有权

[英]QEvent ownership

我想将预定义和自定义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时,情况将发生重大变化:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM