我在清理一堆指针时遇到了一些问题。在下面删除崩溃的行:“内存故障/分段故障”。
std::stack<reports*> stack;
while(db.fetch())
{
reports* report = new report(db);
QThreadPool::globalInstance()->start(report);
stack.push(report);
}
while( QThreadPool::globalInstance()->activateThreadCount() != 0 );
while( !stack.empty() )
{
delete stack.top();
stack.pop();
}
此代码的上下文我认为不相关。除此之外:db通过引用传递给报表构造函数,该构造函数立即将必要的当前行数据复制为非指针成员。 有人可以给我一个暗示吗?
编辑:
自我回答:
在写完我的问题之后,我被神灯触摸了。
默认
QThreadPool::globalInstance()->start(report);
将取得对象的所有权。在循环中添加以下行可以解决问题:
report->setAutoDelete(false);
或者只是不清理......我自己让Qt去做。
答案 0 :(得分:1)
在写完我的问题之后,我被神灯触摸了。
默认
QThreadPool::globalInstance()->start(report);
将取得对象的所有权。在循环中添加以下行可以解决问题:
report->setAutoDelete(false);
或者只是不清理......我自己让Qt去做。
答案 1 :(得分:0)
你可以做两件事来避免明确的记忆魔法,并解决你的问题:
在这种情况下,我认为使用std::shared_ptr是最好的方式。
答案 2 :(得分:-1)
我认为我们需要查看报告类,显然您正在处理堆栈,因此当您尝试删除它时问题必须在报告(堆栈顶部)。
检查/创建报告析构函数,必须有一些你可能在那里处理的东西