背景故事:
我审查了一些代码,并创建了一个本地QMessageBox
显示错误,并将其分配给堆:
if (getAutopilotList.error() == 0) {
QMessageBox* error = new QMessageBox(0);
error->setDetailedText(getAutopilotList.errorString());
error->setText("something");
error->setWindowTitle(tr("Error!"));
error->show();
return;
}
开发商说:
这个指针会泄漏,你没有设置父级并且你永远不会删除它。这里也不需要指针。至于parent不要使用0,而是Core::ICore::mainWindow()。
我很困惑,因为我想:
- QWidgets 只在堆上工作
delete error;
当消息框关闭时指针会自动关闭。
我尝试将 QMessageBox 放在堆栈上,但没有显示。
问题:
- 我可以把这个 QMessageBox 放在堆栈上并让它工作吗,我应该吗?
- 我需要明确
delete
QMessageBox 指针吗? - 在这种情况下,为什么将父级设置为 0 以外的值很重要?