C++是否有垃圾回收类?

3

有没有一个为C++进行垃圾回收的类?我在考虑这样一个东西:

class A : public GarbageCollected<A>
{
  void kill()
  {
     GarbageCollected<A>.set_cleanup_flag();
  }
  ...
private:
  GarbageCollectedPointer<B> b_pointer; // Somehow we follow 
  GarbageCollectedPointer<B> b_pointer2; // these pointers.
};

class B
{
  ...
};

class GarbageContainer
{
  ...
};

int main()
{
  GarbageContainer gc;
  gc.add(new A());
  ...
}

这个想法是GarbageContainer会对对象进行标记和清除或者其他垃圾回收方法。这样就不需要进行引用计数和使用弱指针,只需在需要的情况下使用垃圾回收。

是否有任何库实现了类似于这样的功能?


这里有一个比较SO上许多可用解决方案的链接:https://dev59.com/CXVD5IYBdhLWcg3wHn2d。 - alternative
7
在着手做任何事情之前,停下来思考一下你需要它的原因。每当有人想在 C++ 中使用 GC 时,意味着他们的设计存在问题。 - Gene Bushuyev
3
你应该告诉Hans Boehm和Bjarne Stroustrup这件事。他们都热衷于将标记/清除式垃圾回收引入C ++。 - Steve Jessop
2
我喜欢把“智能指针”看作是“细粒度确定性垃圾收集器”。 - Martin York
1
@Steve Jessop:我认为我理解他们的动机,但我不同意他们。已经有适用于需要GC的人的语言了。在C++中,我认为应该致力于加强值语义,而不是试图遮盖指针语义中的雷区。 - Gene Bushuyev
3个回答

2
C++0x支持shared_ptr,它使用引用计数来跟踪内存分配。如果使用得当,它可以作为一个很好的垃圾收集器。
当没有对象再引用内存块时(引用计数已达到0),shared_ptr将释放内存。
这个教程介绍了shared_ptr的基础知识:shared_ptr教程
这是一个关于shared_ptr内部机制的高级教程:shared_ptr内部机制高级教程

谢谢提供这些链接,我已经寻找类似的资料有一段时间了 :) - lccarrasco

1

查找Boehm的垃圾回收器。我认为它默认情况下没有多个GC容器,但是如果您绝对需要,可以自己添加此功能。


0

libgc 是 C/C++ 中垃圾回收库的一个不错选择。


您的链接似乎已经过时了。 - Keith Pinson
现在已经失效的链接的Web存档中的最新快照:http://web.archive.org/web/20120427084748/http://developers.sun.com/solaris/articles/libgc.html - textshell
这似乎也是一个像Boehm垃圾收集器一样保守的收集器。 - textshell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接