Re: [問題] std::shared_ptr 與 std::weak_ptr 的使用方式?
※ 引述《Feis (永遠睡不著 @@)》之銘言:
: 簡言之, 我們在將一個原有的圖改成 DAG 時,用 std::weak_ptr
: 所取代的 std::shared_ptr 所指向的物件,必須不能比該
: std::weak_ptr 早死亡。也就是說指向該物件的 std::shared_ptr
: 中至少要有一個不會比該 std::weak_ptr 早死亡。
yeah,我也是這麼認為的
: 如何確保這件事情發生感覺有點複雜阿....
: 我想到的三種解法:
: + 畫出圖後找到出現在循環中的所有物件,找出所有指向循環中的
: 物件而不在循環中的 std::shared_ptr 裡有最長生命週期的。
: 將循環中指向該物件的 std::shared_ptr 改為 std::weak_ptr
某些資料結構中的確是可行的
比如說在樹狀結構中 parent 用 shared_ptr 指向 child
而 child 用 weak_ptr 指向 parent
這麼一來就不會有 cycle 而且尋訪時也很容易
但並非所有的資料結構都有這種明顯的階層關係
: + 額外產生一個最晚死亡的 std::shared_ptr 去指向某循環中的
: 物件。將循環中指向該物件的 std::shared_ptr 改為
: std::weak_ptr。
我覺得這有難度
採用這個方法的時候,代表我們不知道在原本的結構中
哪一個 pointer 會最晚死亡
連帶地、我們也很難確定這個額外產生的 shared_ptr 什麼時候才應該死掉
: + 在有可能出現循環的程式中放棄 std::shared_ptr 的使用
yeah
其實也有很多給 C++ 用的 garbage collector
: 不曉得有沒有什麼方式讓我們容易判斷?或者是我認知上有什麼問
: 題嗎 Q_Q
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.3.139
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):