问题标签 [boost-intrusive]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1250 浏览

c++ - 提升侵入式哈希表

谁能提供一个简单的例子来说明如何使用 Boost Intrusive Hashtable?我试图实现它,但我运气不好。

到目前为止我有这个

但由于某种原因,它没有像这样调用上面定义的我的哈希函数

由于某种原因,它不会调用我的 hash_value 函数。对此的任何帮助将不胜感激!

0 投票
1 回答
1066 浏览

boost - 如何从 boost::intrusive set 容器中分离元素

我正在尝试从 boost::intrusive 集中分离元素并获得断言失败。当我从容器中分离后删除元素时。

该类派生自 set_base_hook。

类 fileXfer:公共 set_base_hook > 70 {

我正在使用“擦除”功能将对象从容器中分离出来。当我尝试删除对象时,我得到断言失败。断言失败发生在以下位置。

/usr/local/include/boost/intrusive/detail/utilities.hpp:344: void boost::intrusive::detail::destructor_impl(Hook&, boost::intrusive::detail::link_dispatch<(boost::intrusive: :link_mode_type)1u>) [with Hook = boost::intrusive::detail::generic_hook, boost::intrusive::default_tag, (boost::intrusive::link_mode_type)1u, 3>]: 断言 `!hook.is_linked ()' 失败的。中止(核心转储)

当我查看错误的位置时,我看到了这个命令。

341 { //如果这个断言提出,你可能已经销毁了一个对象 342 //当它仍然被插入到一个活着的容器中时。343 //如果是,在销毁之前从容器中移除对象。344(无效)钩子;BOOST_INTRUSIVE_SAFE_HOOK_DESTRUCTOR_ASSERT(!hook.is_linked()); 第345章

请指示

0 投票
1 回答
1053 浏览

c++ - 对更多 boost::intrusive 容器中的一个元素感到困惑

我不太明白相同的元素如何可能出现在不同的侵入性容器中,同时保留boost::intrusive文档所述的性能和内存使用保证。

文档说:

侵入式容器不存储传递对象的副本,而是存储对象本身。将对象插入容器所需的附加数据必须由对象本身提供。例如,要插入MyClass实现链表的侵入式容器,MyClass必须包含所需的 next 和 previous 指针:

在强调 STL 和 boost::intrusive 容器之间的区别时,文档还说:

非侵入式容器有一些限制:

一个对象只能属于一个容器:如果要在两个容器之间共享一个对象,则要么必须存储这些对象的多个副本,要么需要使用指针容器: std::list<Object*>.

有道理,一个元素不能在两个std::lists 中。好的。但是如何将一个类型的实例MyClass插入两个不同boost::intrusive::list的 ',例如,考虑到这样的元素只能有一个指向下一个元素的指针和一个指向前一个元素的指针。如果我没记错的话,这仅在您假设修改一个容器也可能修改另一个容器时才有效,反之亦然。

0 投票
1 回答
383 浏览

c++ - 增强侵入式交换

我有一个声明为class MyClass : public list_base_hook<link_mode<normal_link>>. 我还有一个声明为list<MyClass> global_list_MyClass.

global_list_MyClass我使用 for 循环插入 10 个节点。我的目标是尝试交换Node1Node2使用boost::intrusive::swap,但似乎失败了(很多编译错误)。

我试图在互联网上搜索,但找不到任何好的例子。

示例代码:

0 投票
1 回答
248 浏览

c++ - 在 C++ 中合并两个增强侵入集?

我有两个增强侵入集,我需要将它们合并在一起。我有map_old.m_old_attributes增强侵入集,我需要将其合并以m_map_new_attributes增强侵入集

做这个的最好方式是什么?我找不到可以为我进行合并的功能?我最近开始使用 boost 侵入集,但我找不到可以进行合并的预定义方法,或者我错了?

0 投票
0 回答
198 浏览

c++ - 在 C++ 中使用 boost::intrusive_ptr 时如何释放内存?

我像这样使用 boost::intrusive_ptr :

如果我正确理解了这段代码 - 这里我会出现内存泄漏,因为我没有释放为 MyObject 分配的内存。如何释放它以避免内存泄漏?

0 投票
1 回答
190 浏览

multithreading - 线程安全提升侵入性列表很慢

我用互斥锁包装了一个 boost 侵入式列表,以使其线程安全,用作生产者/消费者队列。

但是在windows(MSVC 14)上它真的很慢,在分析之后,95%的时间都花在空闲上,主要是push()waint_and_pop()方法。

我只有 1 个生产者和 2 个生产者/消费者线程。

有什么建议可以加快速度吗?

0 投票
1 回答
6639 浏览

c++ - 增强侵入式指针

我对 boost 的侵入式指针有点困惑。定义说:

“每个新intrusive_ptr实例都通过对函数的非限定调用来增加引用计数intrusive_ptr_add_ref,并将指针作为参数传递给它。类似地,当 an intrusive_ptr被销毁时,它会调用intrusive_ptr_release;当对象的引用计数降至零时,此函数负责销毁对象. 用户应提供这两个函数的合适定义。

这是否意味着我必须实现这些方法,或者我可以做到?关键是,我们使用它是因为函数需要一个侵入式指针。我们在其他地方使用了共享指针,所以只是担心指针是否被管理,并且在没有更多引用时将被删除。

0 投票
1 回答
69 浏览

c++ - Boost Intrusive unordered_set 静态成员函数返回错误的大小类型

考虑这段代码,它编译成功:

文档代码中,suggested_upper_bucket_count()都是这样声明的:

那怎么可能Map::size_type是 4 个字节 ( uint32_t) 而结果suggested_upper_bucket_count()却是 8 个字节呢?

现场观看:https ://godbolt.org/g/3Sz8Xj

0 投票
1 回答
663 浏览

c++ - 如何在迭代 boost::intrusive::list 时擦除

如何boost::intrusive::list在迭代时擦除元素?以下代码因断言失败而失败https://wandbox.org/permlink/nzFshFSsaIrvBiTa