【问题标题】:boost::lockfree::queue as static data memberboost::lockfree::queue 作为静态数据成员
【发布时间】:2017-08-23 13:55:08
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c++ boost gmock


    【解决方案1】:

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

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

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

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

    查看boost::pool 以开始使用。

    【讨论】:

      猜你喜欢
      • 2015-06-22
      • 2012-04-17
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-01
      • 2013-02-25
      相关资源
      最近更新 更多