[英]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.