首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QEvent所有权

QEvent所有权
EN

Stack Overflow用户
提问于 2015-06-17 14:59:08
回答 1查看 706关注 0票数 2

我希望将预定义的和自定义的QEvent发送到Qt应用程序。是否需要在堆上分配事件,还是只需将指针传递到堆栈上的对象?

代码语言:javascript
复制
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?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-17 15:28:20

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

通常这是不安全的,但在本例中它是有效的,因为函数notify不会返回,直到某个人处理(或不处理)事件(这意味着stackevent将在此操作期间“活着”)。

删除堆;//有效?还是失去了所有权?

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

使用时,的情况会发生显著变化:

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

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30895304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档