問題:Rc<T>會(huì)引起循環(huán)引用
解決:使用弱引用
定義:Weak<T>
- 弱引用通過(guò)Rc::downgrade 傳遞Rc實(shí)例的引用,調(diào)用Rc::downgrade會(huì)得到Weak<T>類型的智能指針,同時(shí)將weak_count加1(不是將strong_count加1)。
- 區(qū)別在于weak_count 無(wú)需計(jì)數(shù)為0 就能使Rc實(shí)例被清理。只要strong_count為0就可以了。
- 可以通過(guò)Rc::upgrade方法返回Option<Rc<T>>對(duì)象。
C++中:

weak_ptr的崗位職責(zé)用一句話來(lái)描述就是:看managed object是否還存在,如果存在,可以提供負(fù)責(zé)管理該managed object的shared_ptr。
std::weak_ptr 是一個(gè)不控制資源生命周期的智能指針,是對(duì)對(duì)象的一種弱引用,只是提供了對(duì)其管理的資源的一個(gè)訪問手段,引入它的目的為協(xié)助 std::shared_ptr 工作。
std::weak_ptr 可以從一個(gè) std::shared_ptr 或另一個(gè) std::weak_ptr 對(duì)象構(gòu)造,std::shared_ptr 可以直接賦值給 std::weak_ptr ,也可以通過(guò) std::weak_ptr 的 lock() 函數(shù)來(lái)獲得 std::shared_ptr。它的構(gòu)造和析構(gòu)不會(huì)引起引用計(jì)數(shù)的增加或減少。std::weak_ptr 可用來(lái)解決 std::shared_ptr 相互引用時(shí)的死鎖問題(即兩個(gè)std::shared_ptr 相互引用,那么這兩個(gè)指針的引用計(jì)數(shù)永遠(yuǎn)不可能下降為 0, 資源永遠(yuǎn)不會(huì)釋放)。