回答
这两种语言都没有垃圾回收器。至少,不是标准兼容实现的一部分。
请注意,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