C++ 清理一堆指针

C++ 清理一堆指针,c++,multithreading,qt,stl,C++,Multithreading,Qt,Stl,我在清理一堆指针时遇到了一些问题。在下面的行中,删除崩溃:“内存故障/分段故障” 将获得对象的所有权。在循环中添加以下行可以解决此问题: report->setAutoDelete(false); report->setAutoDelete(false); 或者同情地说没有清理。。。我自己,让Qt去做。好的,我刚写完问题就被上帝的光感动了 默认情况下 QThreadPool::globalInstance()->start(report); QThreadPool::gl

我在清理一堆指针时遇到了一些问题。在下面的行中,删除崩溃:“内存故障/分段故障”

将获得对象的所有权。在循环中添加以下行可以解决此问题:

report->setAutoDelete(false);
report->setAutoDelete(false);

或者同情地说没有清理。。。我自己,让Qt去做。

好的,我刚写完问题就被上帝的光感动了

默认情况下

QThreadPool::globalInstance()->start(report);
QThreadPool::globalInstance()->start(report);
将获得对象的所有权。在循环中添加以下行可以解决此问题:

report->setAutoDelete(false);
report->setAutoDelete(false);

或者同情地说没有清理。。。你可以做两件事来避免显式内存,并解决你的问题:

  • 使用
  • 使用参考资料。对于堆栈,STL容器的一个要求是元素必须是可复制的。可以使用包装引用来解决此问题

在这种情况下,我认为使用a是最好的方法。

我认为我们需要查看report类,很明显,您处理的堆栈很好,因此当您尝试删除它们时,问题一定在报告(堆栈顶部)


检查/创建报表析构函数,您可能也会在那里处理某些内容

使用?我可能错了,但为什么要删除
stack.top()
,然后删除
pop()
?我想这将是一场instacrash。线程并发性问题可能会出现吗?在对每个有争议的对象执行操作之前,请使用互斥锁锁定它们。
报告
析构函数是什么样子的?
报告
基类是否有虚拟析构函数?@Levente Kurusa delete stack top将删除栈顶地址指向的内容。Poping将获取堆栈顶部的地址。我相信指针总是可以被复制的?它只是一个内存地址?@user2346536是的,原始指针可以被复制。但是您必须明确地管理它的生命周期。阅读答案的智能指针链接。你应该将此添加到你的原始帖子中。我在上面的评论中对此进行了回答:@claptrap well tough。尽管报表类中没有指针的静态成员。所以这不是问题所在。我在下面回答了我自己的问题。无论如何谢谢你。谁投了你-1票?这个答案一点也不愚蠢。。。