我有一个班级成员:
QSet<QDialog*>* dialogs_; 我是只需要删除dialogs_,还是必须同时对它的每个元素调用delete?
发布于 2011-12-17 19:06:57
这将会起到作用:
qDeleteAll(*dialogs_);
delete dialogs_您也可以在不取消引用的情况下执行此操作:
qDeleteAll(dialogs_->begin(), dialogs->end());
delete dialogs_发布于 2011-12-17 17:27:09
是的,您需要以某种方式手动删除dialogs_中的每个QDialog。
您可以遍历QSet并手动对它们执行delete。因为QDialog继承自QWidget,所以另一种方法是,如果父对话框也在空闲存储上分配,则简单地delete所有对话框的父对话框,这将反过来delete它们。
请注意,没有理由在免费存储上分配QSet,如果这是您正在做的事情。只需将new/delete操作设置为您的类的直接成员,即可保存该操作。
QSet<QDialog*> dialogs_;这就少了一件你需要担心的事情了。手动删除。
发布于 2011-12-17 17:25:03
首先遍历set,删除其中的每个对象,然后删除set对象。
但是,请注意,Qt有自己的内存管理,只需删除集合,并让其中的对象被Qt的机制析构,这可能是可以的。
https://stackoverflow.com/questions/8543791
复制相似问题