Re: [問題] std::shared_ptr 與 std::weak_ptr 的使用方式?

看板C_and_CPP作者 (我要加入劍道社!)時間11年前 (2014/02/05 03:04), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《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
文章代碼(AID): #1IyQfRAS (C_and_CPP)
文章代碼(AID): #1IyQfRAS (C_and_CPP)