gpt4 book ai didi

c++ - c++11 中的 intrusive_ptr

转载 作者:IT老高 更新时间:2023-10-28 12:41:34 28 4
gpt4 key购买 nike

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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com