簡體   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