[英]garbage collector c++
我一直在嘗試用c ++創建一個垃圾收集器,我把它設計為我的所有基類,叫做garbageCandidate,它包含一個靜態向量,包含指向garbageCandidate的指針,每個garbageCollector實例都在向量上推送“this” 。
然后靜態函數出現並刪除靜態向量中的所有指針。
在刪除函數的最開始(刪除第一個指針)我得到一個錯誤,說明刪除被用於無效指針...
這與靜態/動態綁定有關嗎? 我的意思是:刪除操作符是否無法按預期行事,因為我在“父”類上調用delete並且它實際上是一個孩子?
一種避免這種情況的方法是創建虛擬析構函數嗎? (或虛擬刪除功能)?
還是我完全錯過了什么?
ps:用於動態創建的測試的所有對象。
您是否有理由推出自己的自定義垃圾收集器? 如果所有對象都是動態創建的,那么為什么不使用boost的智能指針(如boost :: shared_ptr ),它本質上使用RAII為您提供經過良好測試的垃圾收集解決方案?
我問,因為通常在項目的軟件開發生命周期的過程中,你最終修復了你自己編寫的代碼中的錯誤(至少大部分時間)。 那你有沒有理由重新發明輪子?
我認為您應該使用Boehm Conservative GC或智能指針,而不是滾動您自己的GC。 兩者都不完美:
Boehm Collector要求您使用特殊分配和(如果使用它)deallocate方法,並且需要一些努力來獲取現有庫:
每次為變量指定指針時,智能指針都會增加開銷。 它們不處理在其中具有指針周期的對象網絡。 您需要手動中斷周期以允許收集從中可以訪問的對象。
盡管如此,與滾動您自己的解決方案相比,Boehm GC或智能指針中的任何一個都將減少實施和維護工作量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.