gpt4 book ai didi

c++ - 当 weak_ptr 的 shared_ptr 被销毁时会发生什么?

转载 作者:可可西里 更新时间:2023-11-01 15:10:10 24 4
gpt4 key购买 nike

似乎是一个 weak_ptr 不知何故只知道什么时候 shared_ptr 它的引用已被销毁。那个怎么样?是否维护了一个恒定的链接或其他东西?

following code for example :

weak_ptr<int> test() {
shared_ptr<int> foo{new int};

return foo;
}

int main() {
auto foo = test();

cout << foo.expired() << endl;
}

weak_ptr<int> 时,我预计会出现段错误去检查 shared_ptr<int> 的状态但没有一个。 weak_ptr<int>正确地将内存识别为已释放。它怎么知道的?

最佳答案

A std::shared_ptr使用两 block 内存创建:

  • 资源 block :它包含指向实际底层数据的指针,例如'整数*'

  • 控制 block :它包含特定于 shared_ptr 的信息,例如引用计数。

(有时为了提高效率,这些分配在单个内存块中,请参阅 std::make_shared)

控制 block 存储weak_ptr 的引用计数。 .直到最后一个 weak_ptr 才会被释放超出范围(弱指针引用计数降为零)。

所以一个weak_ptr将知道它已过期,因为它可以访问此控制 block ,并且它可以检查以查看 shared_ptr 的引用计数是多少 |

关于c++ - 当 weak_ptr 的 shared_ptr 被销毁时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34047275/

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