boost::lockfree::queue 作为静态数据成员

boost::lockfree::queue as static data member

我们有一个 class,我们将 boost::lockfree::queue 声明为 static 数据成员并覆盖 newdelete 运算符。 new / delete 运算符中的逻辑是创建 class 的实例以获取/放置队列中对象的指针。

问题是在测试用例成功完成后我遇到段错误。如果我评论 delete arr[i] 语句,则不再发生错误。

我的假设是,由于 Boost 队列是静态的,因此数据成员将最后被销毁,或者当程序结束时将调用它自己的析构函数,但我不确定它的析构函数中是什么导致中止或给出分段错误。

任何指示对解决问题真的很有帮助吗?

您需要注意 operator newnew expression(例如 new B())是不同的东西。 new 表达式 调用相应的 operator new 然后是对象的构造函数。 operator new 的工作是 return 未初始化的内存,此时对象不存在。

当您在 operator new 实现中调用 f->initialize(); 时,该调用之后是对象的构造函数,它必须初始化所有对象的内存。

也就是说,在operator new中只能实现内存缓存,不能实现对象缓存

如果你想要对象的缓存,你需要使用工厂(工厂设计模式)。

查看 boost::pool 开始。