簡體   English   中英

清理一堆指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM