c ++删除指针列表

时间:2016-11-21 22:40:57

标签: c++ list qt pointers

我在c ++中使用了这个类对象(使用Qt):

class Foo {

    public:
        Foo();
        ~Foo();

        QList<Bar*> barList;
}

我的问题是:我是否需要删除析构函数barList中的每个Bar对象(for循环),或者由于列表是静态对象,所有内容都将被Foo对象删除?

谢谢。

1 个答案:

答案 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提供的容器。