2015-04-06 283 views
1

我有一个添加了项目(包括图标和文本)的QComboBox_1。然后,我从QPushButton_1 clicked()中将项目添加到QListWidget_1中。 QListWidget强制添加一个QListWidgetItem作为指针值。Qt QListWidget addItem内存泄漏

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++的初学者

在此先感谢。

回答

1

不,它不会。从技术上讲,这从手册来看并不是很明显,尽管人们可以设想这一点。

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

+1

这是一个普通的过程,任何传递给qwidget(或任何传递给另一个qwidget的qwidget的指针都会像这样被照顾吗? – Jeet

+1

@Jeet其实不,一般情况下你的算法应该是 - 如果你传递的是'QObject'(例如任何'QWidget'都是'QObject'的子类)如果你的对象的所有权被采用(至少对于函数“添加”或“插入”)。然而,在这种情况下'QListWidgetItem'不是'QObject',所以你只能假设所有权将被采用,因为它是通过指针传递的,也可能看到它的用法等的一些例子。我不认为这是真的很好的设计但我们必须忍受它。 – Predelnik