当前位置:  开发笔记 > 编程语言 > 正文

当其shared_ptr被销毁时,weak_ptr会发生什么?

如何解决《当其shared_ptr被销毁时,weak_ptr会发生什么?》经验,为你挑选了1个好方法。

似乎weak_ptr某种方式只知道shared_ptr它的引用何时被破坏了.那个怎么样?是否存在持续的链接或什么?

以下面的代码为例:

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

    return foo;
}

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

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

当我weak_ptr去检查状态shared_ptr但是没有一个时,我本来期望一个段错误.在weak_ptr正确地识别存储器中作为释放.怎么知道的?



1> AndyG..:

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

资源块:它保存指向实际底层数据的指针,例如'int*'

控制块:它保存特定于shared_ptr的信息,例如引用计数.

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

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

所以a weak_ptr会知道它已经过期,因为它可以访问这个控制块,并且它可以检查以查看引用计数是什么shared_ptr


@JonathanMee:是的,从概念上讲,这就是正在发生的事情.顺便说一句,您可以打开标准库头文件并自己查看实现!
推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有