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