2011-06-19 41 views
3

有没有垃圾回收类的C++。我的想法是这样的: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会做标记和清理上的物体或其他一些垃圾收集方法。这将节省必须做引用计数和使用weak_ptrs和垃圾收集可以只用于它觉得有必要的对象。

是否有任何库实现这样的东西?

+7

前甚至去那里,停下来想一想,为什么你需要它。每次有人想在C++中使用GC,都意味着他们的设计是错误的。 –

+3

@Gene:你应该告诉Hans Boehm和Bjarne Stroustrup。他们都热衷于将标记/扫描样式GC转换为C++。 –

+2

我喜欢将'智能指针'想象成'细粒度确定性垃圾收集器'。 –

回答

1

查找Boehm的垃圾收集器。我不认为它有多个开箱即用的GC容器,但如果您绝对需要它,您可以自己添加此功能。

0

libgc是在C/C++

+0

您的链接似乎已过时。 –

+0

现在断开的链接的网络存档的最新快照:http://web.archive.org/web/20120427084748/http://developers.sun.com/solaris/articles/libgc.html – textshell

+0

这也是一个保守的收藏家像Boehm的垃圾收集器似乎。 – textshell

2

的C++ 0x的垃圾收集库是一个好的选择支持使用引用计数跟踪内存分配的shared_ptr。如果仔细使用,它可以作为一个好的垃圾收集器。

shared_ptr在没有剩余的对象参照内存块(引用计数已达到0)时释放内存。

+0

感谢您的联系,一直在寻找像这样的材料:) – lccarrasco