什么垃圾收集器可用于C ++?

时间:2009-01-21 15:12:33

标签: c++ garbage-collection

哪些垃圾收集器可用于C ++?你在使用它们吗?结果如何?

6 个答案:

答案 0 :(得分:6)

Boost库包含一些shared_ptr内容,它们基本上充当引用计数垃圾收集器。如果您接受C ++设计的RAII原则,那么auto_ptr将满足您对“垃圾收集器”的需求。

答案 1 :(得分:5)

列出了几个C ++ GC on wikipedia

但是,我不使用任何,RAII也是我的朋友。

答案 2 :(得分:5)

Boehm垃圾收集器非常适合C,但在C ++下使用很棘手。查看http://www.hpl.hp.com/personal/Hans_Boehm/gc/gcinterface.html上的“C ++界面”部分。

我的意见是,如果你需要垃圾收集,请选择内置垃圾的语言。

C ++的最佳通用解决方案是共享指针(例如来自boost),同时处理循环依赖。你可以做两件事: 1.设计没有循环依赖的东西 2.设计带有“linch-pin”的东西,打破圆圈以允许回收物体

要么处理真正糟糕,错综复杂,难以调试C ++垃圾收集器的问题,要么处理在完成对象时释放对象的更简单的经典问题。

答案 3 :(得分:4)

我个人听过的唯一一个是Boehm garbage collector我确信其他人存在,但我没有处理过它们(或者也没有找到它们)。

答案 4 :(得分:2)

总是,ahem:C++/CLI - .NET Framework的C ++。那里很好的垃圾收集。 :P

虽然,老实说,他们放在那里的所有语法糖,你几乎可以认为它是一种恰好与C / C ++一起使用的全新语言。

如果您没有将C ++作为一种语言结合,那么您也可以查看D,它编译为本机代码,如C ++(与C ++ / CLI不同),但也有垃圾回收。

答案 5 :(得分:2)

您可以找到多个实现here。我从未尝试过任何一种,一般来说,我发现一种非确定性的GC会造成更多的伤害。