c++ - 一个侵入性的 unique_ptr 列表?

标签 c++ pointers ownership intrusive-containers

我有一个高度多线程的程序,它包含一个侵入式对象链表。我需要将此列表中的对象传递给多个线程,但一次只有 1 个线程拥有该对象,这意味着我不需要共享此对象或指向它的指针。

我想使用 boost 创建一个带有 unique_ptr 的侵入式列表,但据我所知,unique_ptr 与 Boost 侵入式库不兼容,因为它没有正确的所有权语义。

根据 this侵入式库要求它的元素(指针)具有与原始指针相同的所有权语义。所以 unique_ptr 甚至 shared_ptr 都不符合条件。

我想知道是否有人可以给我一些关于如何最好地实现我的侵入式列表的建议,这样我就可以安全地通过多个线程传递它的元素并知道它们被移动到那个线程而不是在线程之间共享?

最佳答案

据我所知,要使其正常工作,您需要某种类型的 auto-unlink hooks .

由于侵入式容器拥有它包含的对象,因此将 unique_ptr 引用的原始指针添加到侵入式容器应该没有任何问题。

如果您需要能够从侵入式列表中的原始指针访问实际的 unique_ptr,则类似于 enable_shared_from_this可能有帮助。 (您需要将侵入式容器与侵​​入式 unique_ptr 结合起来。)


稍微考虑一下后,似乎确实没有侵入式 unique_ptr 变体,因为智能指针的“侵入式”部分通常是引用计数,而 unique_ptr 之类的对象没有引用计数.

可能您最好为此使用 shared_ptr,因为它已经具有 enabled_shared_from_this。

关于c++ - 一个侵入性的 unique_ptr 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3880239/

相关文章:

c++ - constexpr int* ptr =&i 在 msvc 中编译但不使用 clang 和 gcc

比较c中的两个相等数组但输出显示不相等

c++ - 了解运算符重载和迭代器为什么会打印出 “wrhrwwr”?

rust - 如何初始化数组并保存对其项的引用?

rust - 我可以以某种方式修改 '&' 数组吗?

c++ - 如何打印 Qt 对话框或窗口?

c++ - 使用非前缀成员变量时如何命名构造函数参数?

c++在不知道对象类型的情况下定义成员函数指针

string - Rust 中的 `str` 有什么用处吗?

c++ - 确保一个类不继承自两个接口(interface)