似乎weak_ptr
某种方式只知道shared_ptr
它的引用何时被破坏了.那个怎么样?是否存在持续的链接或什么?
以下面的代码为例:
weak_ptrtest() { shared_ptr foo{new int}; return foo; } int main() { auto foo = test(); cout << foo.expired() << endl; }
当我weak_ptr
去检查状态shared_ptr
但是没有一个时,我本来期望一个段错误.在weak_ptr
正确地识别存储器中作为释放.怎么知道的?
std::shared_ptr
使用两个内存创建A :
资源块:它保存指向实际底层数据的指针,例如'int*'
控制块:它保存特定于shared_ptr的信息,例如引用计数.
(有时这些是为了提高效率而分配在一块内存中,请参阅std::make_shared
)
该控制模块 还存储引用计数weak_ptr
.直到最后一个weak_ptr
超出范围(弱指针引用计数降为零)才会释放它.
所以a weak_ptr
会知道它已经过期,因为它可以访问这个控制块,并且它可以检查以查看引用计数是什么shared_ptr