5

我一直在尝试在 C++ 中创建一个垃圾收集器,我将它设计为我所有人的基类,称为garbageCandidate,它包含一个静态向量,其中包含指向garbageCandidate 的指针,每个garbageCollector 实例都将“this”推到向量上.

然后一个静态函数来删除静态向量中的所有指针。

在删除函数的一开始(在第一个指针上删除)我得到一个错误,指出删除被用于无效指针......

这与静态/动态绑定有关吗?我的意思是:删除操作符是否无法按预期运行,因为我在“父亲”类上调用 delete 并且它实际上是一个孩子?

避免这种情况的方法是创建虚拟析构函数吗?(或虚拟删除功能)?

还是我完全错过了什么?

ps:用于测试的所有对象都是动态创建的。

4

2 回答 2

0

您是否有理由使用自己的自定义垃圾收集器?如果您的所有对象都是动态创建的,那么您为什么不使用 boost 的智能指针(如boost::shared_ptr),它本质上使用RAII为您提供经过良好测试的垃圾收集解决方案?

我问是因为通常在项目的软件开发生命周期过程中,您最终会修复自己编写的代码中的错误(至少在大多数情况下)。那么你有理由重新发明轮子吗?

于 2013-04-09T22:37:47.197 回答
0

我认为您应该使用Boehm Conservative GC或智能指针,而不是滚动您自己的 GC。两者都不完美:

尽管如此,与滚动您自己的解决方案相比,Boehm GC 或智能指针的实施和维护工作量都更少。

于 2013-04-09T22:59:13.453 回答