c++ - c++11 中的 intrusive_ptr

标签 c++ c++11 boost shared-ptr smart-pointers

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

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

最佳答案

Does c++11 have something equivalent to boost::intrusive_ptr?

没有。

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

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


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

关于c++ - c++11 中的 intrusive_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13912286/

相关文章:

c++ - 如何仅强制类的智能指针实例?

c++ - 检查四个点是否在同一平面上,仅使用距离(验证共线性)

c++ - 一旦 std :thread makes into C++Ox,pthreads 会过时吗

c++ - 在 C++ 中使用 BOOST 序列化循环图

c++ - 我的 cipher() 函数似乎不支持大写字母

c++ - OpenMP Makefile,-fopenmp 不起作用

c++ - 在 std::map 中使用 decltype

c++ - 拆分可变参数模板参数

c++ - boost::Serialize VS std::fstream

c++ - 什么是 c# AutoResetEvent/ManualResetEvent 的 c++ 可移植模拟?