我在c ++中使用了这个类对象(使用Qt):
class Foo {
public:
Foo();
~Foo();
QList<Bar*> barList;
}
我的问题是:我是否需要删除析构函数barList中的每个Bar对象(for循环),或者由于列表是静态对象,所有内容都将被Foo对象删除?
谢谢。
答案 0 :(得分:2)
您可以在列表中使用qDeleteAll(...)
(基本上是foreach
并在内部的每个项目上调用delete
)。 不使用QList::clear()
只会从列表中删除项目,但不会触发解除分配。但是,您可以将两者结合起来,首先释放列表项(指针)引用的对象的内存,然后使用clear()
从列表中删除项目(指针),为您留下空{{1} }。
除此之外,如果barList
派生自Bar
,您可以将其父级设置为另一个对象/小部件,您肯定会在某个时候正确释放它。这是Qt中的父子模型,是一种很好的清理方法,无需自己处理删除。
此处QObject
也不正确。我认为您的意思是static
,即on the stack
未动态分配。
请注意:即使您有barList
,不也意味着项目本身是动态分配的。您可以在堆栈上创建项目,然后通过引用将它们附加到最少,如果您尝试删除它们,则会导致分段错误。由于您没有提供更多代码,我无法说明您的Bar*
是否是动态分配的。
当然,这实际上取决于Bar*
代表什么,所以第二个建议可能不适合给定的场景。
顺便说一句,你的问题显示一般缺乏理解指针是如何工作的,实际上并不是Qt相关的(即使你的问题出现在Qt的上下文中)。我对你的建议是查找一些关于C / C ++指针的一般信息,然后转到Qt提供的容器。