一个侵入性的unique_ptrs列表?

时间:2010-10-07 09:15:14

标签: c++ pointers ownership intrusive-containers

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

我想使用boost创建一个带有unique_ptr的侵入式列表,但是从我读过的内容中,u​​nique_ptr与Boost侵入式库不兼容,因为它没有正确的所有权语义。

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

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

1 个答案:

答案 0 :(得分:1)

据我所知,为了实现这一目标,您需要某种auto-unlink hooks

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

如果您需要能够从侵入列表中的原始指针访问实际的unique_ptr,那么enable_shared_from_this的内容可能会有所帮助。 (您需要将侵入式容器与侵​​入式unique_ptr结合使用。)


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

可能你最好使用shared_ptr,因为它已经有了enabled_shared_from_this。