[英]Does the embedded “new” in the following code cause a memory leak?
我不这么认为,我认为该函数终止时会删除内存,但我想向社区咨询。
void MainWindow::editCopy (void)
{
QWidget *pqwgtFocus = QApplication::focusWidget();
if (pqwgtFocus != 0)
{
QApplication::postEvent ( pqwgtFocus,
new QKeyEvent ( QEvent::KeyPress,
Qt::Key_C,
Qt::ControlModifier
)
);
QApplication::postEvent ( pqwgtFocus,
new QKeyEvent ( QEvent::KeyRelease,
Qt::Key_C,
Qt::ControlModifier
)
);
}
return;
}
是的,该应用程序将获得所有权,并且绝对安全。
该事件必须在堆上分配,因为发布事件队列将获得该事件的所有权,并在发布后将其删除。 发布事件后,访问该事件是不安全的。
这里没有内存泄漏。 QApplication::postEvent
拥有指针的所有权,完成后将对其调用delete
:
该事件必须在堆上分配,因为发布事件队列将获得该事件的所有权,并在发布后将其删除。 发布事件后,访问该事件是不安全的。
请注意,这确实是糟糕的界面。 您必须明确检查文档以确保正确使用了该功能。 相反,如果它接受了QScopedPointer
那么仅通过查看函数签名即可知道postEvent
正在获取指针的所有权。
postEvent
获取事件的记录,并在事件完成后将其delete
。 没有泄漏。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.