繁体   English   中英

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

[英]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;
}

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

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

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

这里没有内存泄漏。 QApplication::postEvent拥有指针的所有权,完成后将对其调用delete

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


请注意,这确实是糟糕的界面。 您必须明确检查文档以确保正确使用了该功能。 相反,如果它接受了QScopedPointer那么仅通过查看函数签名即可知道postEvent正在获取指针的所有权。

postEvent获取事件的记录,并在事件完成后将其delete 没有泄漏。

暂无
暂无

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

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