2011-06-19 61 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