2011-12-17 114 views
0

我有一類成員:我是否必須手動刪除QSet的每個(指針)元素?

QSet<QDialog*>* dialogs_; 

我需要直接刪除dialogs_還是我打電話給刪除它的每一個元素呢?

+0

你提供一些背景。如果你的類只是初始化`dialogs_`到`NULL`然後否,你不需要'刪除'任何東西。它做別的事嗎?我們不知道,你沒有告訴我們。 – 2011-12-17 09:26:15

回答

0

首先迭代您的設置,刪除其中的每個對象,然後刪除設置的對象。

但是,請注意Qt擁有自己的內存管理,只需刪除該組並將其中的對象由Qt的機制銷燬即可。

+0

我一段時間都沒有用過Qt,但是我敢肯定,當你將一個像`QDialog`這樣的ui元素傳遞給父對象時,該對象將負責對子UI元素的內存管理。儘管如此,不要引用我的話。 – 2011-12-17 10:30:56

1

是的,你需要以某種方式手動刪除dialogs_中的每個QDialog,如果有的話。

你可以通過QSetdelete自己迭代它們。因爲QDialog繼承自QWidget,所以另一種方法是簡單地將所有對話的父母對應起來,如果母公司也在免費商店中分配的話,那麼它們又將是delete它們的delete

請注意,沒有理由在免費商店中分配QSet,如果這就是您正在做的事情。您只需將其作爲班級的直接成員即可保存new/delete操作。

QSet<QDialog*> dialogs_; 

這就是你不必擔心的一件事w.r.t.手動刪除。

2

這將這樣的伎倆:

qDeleteAll(*dialogs_); 
delete dialogs_ 

你也可以不用提領:

qDeleteAll(dialogs_->begin(), dialogs->end()); 
delete dialogs_ 
相關問題