我是否必须手动删除QSet的每个(指针)元素?

时间:2011-12-17 09:22:16

标签: c++ qt memory-management

我有一个班级成员:

QSet<QDialog*>* dialogs_;  

我是否只需删除dialogs_或者我是否也必须在其中的每个元素上调用delete?

3 个答案:

答案 0 :(得分:2)

这样可以解决问题:

qDeleteAll(*dialogs_);
delete dialogs_

您也可以在不取消引用的情况下执行此操作:

qDeleteAll(dialogs_->begin(), dialogs->end());
delete dialogs_

答案 1 :(得分:1)

是的,您需要以某种方式手动删除QDialog中的每个dialogs_,如果有的话。

您可以自己手动遍历QSetdelete。因为QDialog继承自QWidget,所以另一种方法是简单delete所有对话框的父级,如果父级也在免费商店中分配,那么{{1}他们。

请注意,没有理由在免费商店分配delete,如果这就是您正在做的事情。您只需将其设置为班级的直接成员即可保存QSet / new操作。

delete

你不必担心w.r.t.手动删除。

答案 2 :(得分:0)

首先遍历您的集合,删除其中的每个对象,然后删除集合对象。

但是,请注意Qt有自己的内存管理,可能只是删除该集合,并将其中的对象保留为Qt的机制。