2011-12-17 34 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_ 
相关问题