gpt4 book ai didi

c++ - weak_ptr 包含哪些变量?

转载 作者:行者123 更新时间:2023-11-30 03:14:08 26 4
gpt4 key购买 nike

我了解可用的方法以及它们是什么。请描述 weak_ptr 类的私有(private)部分或给出一些自定义 weak_ptr 代码的示例。我无法通过 std::weak_ptr 实现来理解。

最佳答案

非侵入式共享指针实现通常包含指向某个动态分配的“状态”的指针,该状态计算对原始对象的引用数量。

当共享指针被复制时,拷贝获得指向相同“状态”的相同指针,并且“状态”内的计数递增以指示现在有两个共享指针共享资源。

当一个共享指针被销毁时,它递减计数器以指示现在共享资源的指针少了一个。如果这导致计数器读数为零,则资源将被销毁。

弱指针也有指向此“状态”的指针,但它不会递增或递减计数器。当被询问时,它将使用相同的状态构造一个共享指针,但前提是计数不为零。如果计数为零,则最后一个共享指针已经破坏了资源,我们无法再访问它。

有趣的是,您还需要这样的逻辑来控制“状态”对象的生命周期。 :) (我想这是使用第二个计数器实现的,shared_ptrweak_ptr 都会递增,但不要引用我的话。)

(your data)         (ref. counters)
║ ║
[resource] [state]
┆ │ │ │ │ │
┆ │ └─[shared_ptr]───┘ │ │
┆ └───[shared_ptr]─────┘ │
└┄┄┄┄┄┄┄[weak_ptr]────────┘

当然,任何特定 std::weak_ptr 实现的私有(private)部分究竟是什么样子取决于编写它的人。

顺便说一下,如果您怀疑它指向的资源可能已经被管理,那么该图显示了为什么您不应该从原始指针构造一个shared_ptr通过 shared_ptr(s) 其他地方:你会得到第二个不相关的“状态”对象,你的计数器会出错,你的资源可能会过早销毁(并且肯定会被销毁两次,如果这样一个概念存在),造成困惑。

关于c++ - weak_ptr 包含哪些变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58121002/

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