为什么不能将intrusive_ptr和shared_ptr与boost :: intrusive容器一起使用?

Jos*_*vin 6 c++ boost smart-pointers shared-ptr intrusive-containers

boost :: intrusive文档描述了如何使用带有侵入式容器的智能指针,但后来说你不能使用你最有可能使用的智能指针,"它必须具有与原始指针相同的所有权语义.意味着不能使用资源管理智能指针(如boost :: shared_ptr)."

为什么是这样?我想不出他们应该被禁止的任何明显理由.究竟会打破什么?侵入式容器无论如何都不管理其中的项目分配.在我的情况下,我想使用intrusive_ptr,但我没有看到为什么shared_ptr不应该工作的任何原因.

编辑:要清楚,我的意思是钩子指针(例如,侵入式单链表中的下一个指针)是一个智能指针.

Evg*_*zin 0

一个明显的原因是效率。shared_ptr使用原子递增/递减操作来计数引用。这意味着shared_ptr在幕后处理使用指针的足够大的容器将花费几秒钟,因为每个引用计数器都需要原子地递减。

  • 我提到 intrusive_ptr 没有这个问题。此外,这并没有真正回答问题,这就是为什么文档说你不能这样做。这与这是否是一个好主意不同。 (3认同)