为 QWidgets 调用 new 而不删除

Calling new without delete for QWidgets

我正在尝试在我的 GUI 中的列表小部件中列出对象。我设法用这些代码行显示一个项目:

    QListWidgetItem *currTest = new QListWidgetItem(QIcon("icons/lungs.jpg"), QString::number(respirationTests.size()));
    ui->listWidget->addItem(currTest);

我在本教程中学到了这个 https://www.youtube.com/watch?v=2YRAJt-LbkM 但是我很担心,因为我使用了 new 而没有调用 delete。当 UI main window 关闭时,QListWidgetItem 对象是否会被正确删除?我不确定 qt 如何使用创建的小部件管理内存。

而且,只是为了确保,如果您重新启动计算机,调用 new 而不是 delete 所泄漏的内存将被清除,对吗?

在这种情况下使用不带 deletenew 不会导致内存泄漏。因为 Qt 有一种机制可以将其 OQbjects 组织成一棵树,其中每个父项都拥有其子项的所有权,并在父项的生命周期结束时释放子项的内存。在您的特定情况下,listWidget 析构函数将 delete 您 add/insert.

的所有项目

关于第二个问题:通常* OS 会在您的应用程序关闭时收回内存的所有权(*除非您处理某些特殊情况,例如某些较低级别 OS 内部结构并设法从那里泄漏内存)。 但是尽管如此,您应该始终确保您的应用程序没有资源泄漏。