我有一个班级成员:
QSet<QDialog*>* dialogs_;
我是否只需删除dialogs_或者我是否也必须在其中的每个元素上调用delete?
答案 0 :(得分:2)
这样可以解决问题:
qDeleteAll(*dialogs_);
delete dialogs_
您也可以在不取消引用的情况下执行此操作:
qDeleteAll(dialogs_->begin(), dialogs->end());
delete dialogs_
答案 1 :(得分:1)
是的,您需要以某种方式手动删除QDialog
中的每个dialogs_
,如果有的话。
您可以自己手动遍历QSet
和delete
。因为QDialog
继承自QWidget
,所以另一种方法是简单delete
所有对话框的父级,如果父级也在免费商店中分配,那么{{1}他们。
请注意,没有理由在免费商店分配delete
,如果这就是您正在做的事情。您只需将其设置为班级的直接成员即可保存QSet
/ new
操作。
delete
你不必担心w.r.t.手动删除。
答案 2 :(得分:0)
首先遍历您的集合,删除其中的每个对象,然后删除集合对象。
但是,请注意Qt有自己的内存管理,可能只是删除该集合,并将其中的对象保留为Qt的机制。