【问题标题】:Qt QListWidget addItem memory leakQt QListWidget addItem内存泄漏
【发布时间】:2015-04-06 15:08:28
【问题描述】:

我有一个添加了项目的 QComboBox_1(图标和文本)。然后我从 QPushButton_1 clicked() 将项目添加到 QListWidget_1,如下所示。 QListWidget 强制添加一个 QListWidgetItem 作为指针值。

void MainWindow::on_QPushButton_1_clicked(){
int intSelected = ui->QComboBox_1->currentIndex();
QListWidgetItem *Itm = new QListWidgetItem(ui->QComboBox_1->itemIcon(intSelected), ui->QComboBox_1->itemText(intSelected));
ui->QListWidget_1->addItem(Itm);}

而且它工作正常。但我没有在任何代码中删除指针变量“*Itm”(MainWindow 卸载或关闭)。这会造成内存泄漏吗?

我是 Qt 和 C++ 的初学者

提前致谢。

【问题讨论】:

    标签: c++ qt memory-leaks


    【解决方案1】:

    不,它不会。从技术上讲,这在手册中并不完全明显,尽管可以肯定地假设这一点。

    此外,在 QListWidget.cpp 的源代码中,您可以看到项目存储在内部 QListModel 类中,该类在其析构函数中自动处理它们的删除,在其他情况下,当它们被删除时。

    【讨论】:

    • 这是一个通用过程,任何传递给 qwidget 的指针(或)任何传递给另一个 qwidget 的 qwidget 都会像这样处理吗?
    • @Jeet 实际上不,一般情况下你的算法应该是 - 如果你传递的是QObject(例如任何QWidget也是QObject的子类)在大多数情况下如果您的对象的所有权被占用(至少对于函数addinsert 某些东西),它应该说明手册中的位置。但是在这种情况下,QListWidgetItem 不是QObject,因此您只能假设所有权将被占用,因为它是通过指针传递的,并且可能还会看到一些使用示例等。我认为这不是一个很好的设计但我们必须忍受它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多