|
0
|
| Troskyvs · 技术社区 · 4 年前 |
|
|
1
5
这不是一个需要“证明”的“理论”。这是真的
法令
;该标准要求
如果您希望看到演示,可以通过
|
|
|
2
1
您的代码无法证明,因为sp1和sp2是局部变量,当它们超出范围时,它们将被释放。你可以用勾手或蛙跳来展示你想要看到的结果,但这并不容易。 我们可以阅读weak_ptr的源代码,这样我们就可以知道真正的作用,weak_ptr的源代码太多了,我们只查看关键部分:
从代码中,我们可以看到大多数工作都是由父类__weak_ptr完成的,也就是说查看__weak_ptr的代码:
当我们调用weak_ptr的use_count()时,我们调用_M_refcount_M_get_use_count(),_M_refcount是在类__weak_ptr的构造函数中分配的,在分配列表中我们可以看到_M_refcunt(__r._M_refccount),所以我们应该知道__weak_count的构造函数中真正的作用:
在类__weak_count的构造函数中,成员_M_pi是由shared_ptr的成员_M_pi分配的,我们查看函数_M_get_use_count(),当我们调用weak_ptr的use_count(。 让我们回到您的问题:“是否存在share_ptr ref计数为0,而weak_ptr ref数不为0的情况?” 我认为用正常的方式写代码,答案是否定的! |