gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 01:45:03 25 4
gpt4 key购买 nike

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

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

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

有什么建议对解决这个问题很有帮助吗?

最佳答案

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

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

换句话说,你只能在operator new中实现内存缓存,而不是对象缓存

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

看看boost::pool开始。

关于c++ - boost::lockfree::queue 作为静态数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45508301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com