2015-04-06 293 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