gpt4 book ai didi

c++ - 是否有与 shared_from_this 等效的 weak_ptr?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:05:26 27 4
gpt4 key购买 nike

我有一个类,我知道它将永远属于std::shared_ptr。然而,将 shared_ptr 甚至 weak_ptr 传递给不需要所有权或生命周期保证的函数和方法会产生不必要的开销。为了解决这个问题,我经常将原始指针传递给函数。该类本身继承自 std::enable_shared_from_this,因此如果函数需要获取指针的所有权,它可以使用该类的方法来获取 shared_ptr

一切都很顺利。然而,有些情况下我真的不想从原始指针创建一个 shared_ptr,我想要的是一个 weak_ptr

根据我对 std::shared_ptr 的通常实现的理解,它有两个用作引用计数器的原子变量;一个用于 shared_ptr,一个用于 weak_ptr

如果我只有一个指向我的类的原始指针并且我想要一个 weak_ptr,我必须首先创建一个 shared_ptr 并转换它。这样做意味着引用计数器会像这样更改:

  • 构造shared_ptr,增加shared_ptr计数器
  • 复制构造weak_ptr,增加weak_ptr计数器
  • 允许 shared_ptr 超出范围,减少 shared_ptr 计数器

这似乎违背了“你不用为你不用的东西付费”的想法。有没有一种方法可以让我的类(class)只提供 weak_ptr 而无需首先创建 shared_ptr

最佳答案

提案 P0033在 2015 年 10 月的 session 上被 C++17 接受,其中添加了 weak_from_this派生自 std::enable_shared_from_this 的类。

关于c++ - 是否有与 shared_from_this 等效的 weak_ptr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38284296/

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