以下代码中的嵌入"new"是否会导致内存泄漏?

Does the embedded "new" in the following code cause a memory leak?

本文关键字:内存 泄漏 是否 new 代码      更新时间:2023-10-16

我不相信,我认为当功能终止时,内存已删除,但我想与社区联系。

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;
}

是的,该应用程序将获得所有权,并且非常安全。

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

https://doc.qt.io/qt-5/qcoreapplication.html#postevent

这里没有内存泄漏。QApplication::postEvent获得指针的所有权,并在完成时将其致电delete

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


请注意,这确实是很差的界面。您必须明确检查文档,以确保您正确使用该功能。如果它接受了QScopedPointer,那么您只会通过查看函数签名来知道postEvent拥有指针的所有权。

postEvent对事件进行ovnersper,并在使用该事件时进行 delete s。无泄漏。