玩具垃圾收集:运营商新/删除足够吗?

Ale*_*ira 5 c++ garbage-collection new-operator

我正在研究我的一个学习项目(在C中),并考虑将其迁移到C++以获得额外的学习点.它的一部分涉及一个特定系列对象的垃圾收集系统,在C中,我通常使用一个大的malloc/mmap实现并使用简单的天真标记和扫描(我可以识别引用和类似的东西)已经).

我的问题是我正在考虑将这个想法转移到C++,但对我对其内存管理方案的理解感到不够安全.

到目前为止,我考虑分配一个大内存池并在基类上重载operator new和delete来调用我的内存池的抓取/释放函数,然后让垃圾收集器的扫描阶段删除它们看到的对象.够了吗?我在这里看不到有什么隐藏的陷阱?

编辑:澄清一下,我已经能够计算出已分配对象的生命周期,因此不需要使用gc abi.这些对象很少被c ++代码操纵,并且使用它们的代码能够通知他们正在使用它们而无需检查堆栈.

egu*_*gur 1

如果您要更改这些类,为什么不让它们从新的基类继承,该基类在构造期间注册到 GC,并在销毁期间取消注册。经理类将负责记账。基类可以是模板:

template <class parent> class BASE_GC {
    BASE_GC() {  /* register address and name*/}
    ~BASE_GC() {  /* unregister*/}
};
Run Code Online (Sandbox Code Playgroud)

父类名可以从 typeid(*this).name() 派生。因为基类名称包含父类名称。