回答
這兩種語言都沒有垃圾回收器。至少,不是標準兼容實現的一部分。
請注意,C++有語言限制,這使得它很難實現垃圾回收。其中一些規則在最新的標準C++ 11中已經放寬了。所以原則上現在可以實現符合標準的C++垃圾收集器。
C++中的標準方法是使用smart pointers來自動管理內存。
有一個interesting article here,包含一些有用的鏈接。從評論中你可以看出,GC與習慣C++的協調是多麼的困難。
如果它沒有不是爲什麼某些情況下會打印垃圾值? –
@ l4zyw0rm我不確定你的意思,但總的來說,打印內容和收集內容的能力是斷開的。 – juanchopanza
比垃圾值呢?有時打印垃圾值,這些值來自哪裏? –
C和C++沒有垃圾回收。
請查看本文/文章:從漢斯·貝姆
是的,我正在尋找這!謝謝 –
A garbage collector for C and C++雖然在標準C和C++沒有垃圾收集的支持,至少有一個流行和漂亮的便攜式實施稱爲Boehm-Demers-Weiser conservative garbage collector。
保守的垃圾收集器通過假設所有看起來像指針的東西都是一個指針,即使它是例如現實中的整數。所以,他們有時可能無法回收未引用的對象。此外,一些像xoring指針這樣的技巧可以隱藏指針。但根據我的經驗,他們似乎在實踐中工作得很好。
在C中,垃圾收集是完全手動的;您需要跟蹤任何使用malloc()
或相關功能分配的任何內容,因此您可以在完成後使用free()
發佈它,而且這絕不會自動完成。
C++通常是相同的;您需要delete
任何分配有new
(和delete[]
任何陣列分配new[]
)的任何東西。但是,這個過程可以(也應該)通過創建管理動態資源的對象來部分自動化,並在解構器中釋放它們。這種技術通常被稱爲RAII,最常見的例子是標準庫中的容器和智能指針。
這兩種語言都沒有自動垃圾回收功能,或者沒有任何方式來確定是否有任何動態對象正在使用;你總是需要自己管理動態資源。有一些非標準的擴展提供垃圾收集,但我對它們一無所知。
- 1. C++有垃圾收集器嗎?
- 2. C有垃圾收集器像Java嗎?
- 3. C#垃圾收集
- 4. 我可以檢測垃圾收集器的工作時間嗎?
- 5. 垃圾收集器,用於託管C++
- 6. C#垃圾收集器交叉引用
- 7. C++:我們可以收集類型嗎?
- 8. 垃圾收集C++ 11
- 9. Objective-C的垃圾收集
- 10. C#中的垃圾收集#
- 11. 可以手動從收集中刪除Silverlight 2.0頁面(垃圾收集)嗎?
- 12. 以C編譯語言收集垃圾
- 13. C#生產服務器,我收集垃圾嗎?
- 14. 在C中監視垃圾收集器#
- 15. C#和.Net垃圾收集器性能
- 16. C#垃圾收集器問題
- 17. c中的不同垃圾收集器#
- 18. C#靜態垃圾收集器?
- 19. C++中的垃圾收集器
- 20. 我們可以強制垃圾收集器在ASP.net中運行嗎?
- 21. 我們可以在java中有一個自定義的垃圾收集器嗎?
- 22. 垃圾收集器
- 23. 瞭解垃圾收集用C
- 24. 垃圾收集和引用C#
- 25. C#垃圾收集對象引用
- 26. C#循環引用的垃圾收集
- 27. Python中的手動垃圾收集
- 28. C#垃圾回收
- 29. 這會收集垃圾嗎?
- 30. v8 |手動啓動垃圾回收器
如果您使用自己的垃圾回收器,當然。如果你不這樣做,那麼答案是否定的,因爲沒有spoo - 我的意思是沒有垃圾收集器。 – Cornstalks
http://www.parashift.com/c++-faq-lite/garbage-collector-basics.html – Lundin
看看http://stackoverflow.com/questions/24891/c-memory-management – UmNyobe