[英]Cleaning up a stack of pointers
我在清理一堆指針時遇到一些問題。 在下面帶有刪除的行崩潰:“內存故障/分段故障”。
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做。
好吧,寫完我的問題后,我被上帝的光芒打動了。
默認
QThreadPool::globalInstance()->start(report);
將獲得對象的所有權。 在循環中添加以下行即可解決此問題:
report->setAutoDelete(false);
或暗示不清理...我自己,讓Qt做。
您可以做兩件事來避免顯式的內存混亂,並解決您的問題:
在這種情況下,我認為使用std :: shared_ptr是最好的方法。
我認為我們需要查看報告類,顯然您的堆棧處理得很好,因此,當您嘗試刪除它們時,問題必須出在報告(堆棧頂部)。
檢查/創建報告析構函數,那里也必須有一些您可以處理的東西
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.