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

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

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

这与静态/动态绑定(bind)有关吗?我的意思是:delete 操作符是否无法按预期行事,因为我在“父”类上调用 delete 而它实际上是一个子类?

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

还是我完全错过了什么?

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

最佳答案

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

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

关于c++ - 垃圾收集器 C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15913404/

10-09 13:31