我一直在尝试用c ++创建一个垃圾收集器,我把它设计为我的所有基类,名为garbageCandidate,它包含一个静态向量,包含指向garbageCandidate的指针,每个garbageCollector实例都推送“this”在矢量上。
然后静态函数出现并删除静态向量中的所有指针。
在删除功能的最开始时(在第一个指针上删除),我收到一条错误,指出删除被用于无效指针......
这是否与静态/动态绑定有关?我的意思是:删除操作符无法按预期运行,因为我在“父”类上调用了delete并且它实际上是一个孩子?
一种避免这种情况的方法是创建虚拟析构函数吗? (或虚拟删除功能)?
还是我完全错过了什么?
ps:用于动态创建的测试的所有对象。
答案 0 :(得分:0)
您是否有理由推出自己的自定义垃圾收集器?如果所有对象都是动态创建的,那么为什么不使用boost的智能指针(如boost::shared_ptr)本质上使用RAII来为您提供经过良好测试的垃圾收集解决方案?
我问,因为通常在项目的软件开发生命周期过程中,你最终修复了你自己编写的代码中的错误(至少大部分时间)。那么你有没有理由重新发明轮子呢?
答案 1 :(得分:0)
我认为您应该使用Boehm Conservative GC或智能指针,而不是滚动自己的GC。两者都不完美:
Boehm Collector要求您使用特殊分配和(如果使用它)deallocate方法,并且需要一些努力来获取现有库:
每次为变量指定指针时,智能指针都会增加开销。它们不处理在其中具有指针周期的对象网络。您需要手动中断周期以允许从中获取对象。
尽管如此,与推出自己的解决方案相比,Boehm GC或Smart指针的实施和维护工作量都会减少。