37

C++11 是否有等同于 的东西boost::intrusive_ptr

我的问题是我的 C++ 代码有一个 C 风格的界面。接口的两端都可以使用 C++,但出于兼容性原因,需要公开 C 接口。我不能使用std::shared_ptr,因为我必须通过两个(或更多)智能指针来管理对象。我无法找出类似的解决方案boost::intrusive_ptr

4

1 回答 1

50

c++11 是否有与 boost::intrusive_ptr 等价的东西?

不。

std::make_shared它确实具有std::shared_ptr几乎(见下面的注释)与侵入式智能指针一样高效的方法,因为引用计数将存储在与对象本身相邻的内存中,从而提高了引用的局部性和缓存的使用。它还提供了std::enable_shared_from_this允许您std::shared_ptr在只有一个指向 a 拥有的对象的内置指针时检索 a 的方法shared_ptr,但这不允许您使用不同的智能指针类型来管理该对象。

shared_ptr期望完全负责管理对象。不同的智能指针类型可能只管理“强”引用计数而不管理“弱”引用计数,这将允许计数不同步并破坏shared_ptr.


注意:使用make_shared允许几乎shared_ptr与侵入式指针一样有效。对象和引用计数信息可以在使用时分配在单个内存块中,但仍然会有两个引用计数(对于“强”和“弱”计数),这不是侵入性指针的情况他们不支持. 此外,对象本身总是必须存储两个指针(一个将由返回的指针和另一个指向包含引用计数并知道所拥有对象的动态类型的“控制块”的指针),因此占用空间比侵入式指针。make_sharedweak_ptrshared_ptrshared_ptr::get()

于 2012-12-17T11:22:13.473 回答