Re: [問題] shared_ptr如何避免cyclic reference?

看板C_and_CPP作者 (神崎・H・アリア)時間5年前 (2019/06/17 21:37), 編輯推噓3(307)
留言10則, 4人參與, 4年前最新討論串2/2 (看更多)
就算是Garbage collector來也一樣不能解 有問題的設計就是有問題 程式語言的工具只是減輕寫程式的人負擔 並不會解決任何問題 你個問題就好比寫了一個暴力演算法 問std::algorithm能不能加速到O(1) ※ 引述《eye5002003 (下一夜)》之銘言: : 可以自由傳遞指標的 std::shared_ptr 比傳統指標要安全許多 : 但即使如此也還是有cyclic reference的問題存在 : 網路上查到的解法幾乎都用 weak_ptr 來處理 : 但是我怎麼看都不覺得這算解法 : 因為它無法阻止物件被釋放 : 之所以要使用 std::shared_ptr 就是希望抓著指標就一定能使用所指的物件 : 我自己目前的做法是對物件分層級 : 只有高層物件可以擁有指標指向下層物件 : 確保不會連成一圈 : 這方式我還沒看到明顯的問題 : 但是這種自我約束的行為還是很不可靠 : 一個不小心包成std::function之類的東西然後亂丟可能就發生 : 而且一旦出現cyclic也很難查覺 : 因為它就只是安靜的咬著記憶體不放 : 不知道有沒有更理想的處理方式? : 或者有比 shared_ptr 更好的工具也可以介紹一下 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.138.138.159 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1560778653.A.298.html

06/18 08:42, 5年前 , 1F
呃,GC 是可以解決 cyclic reference 的,實務上因為
06/18 08:42, 1F

06/18 08:42, 5年前 , 2F
cyclic 太常見,所以大部分語言都是用 GC 而不是 smar
06/18 08:42, 2F

06/18 08:42, 5年前 , 3F
t pointer。
06/18 08:42, 3F

06/18 11:08, 5年前 , 4F
GC如何解決的?這問題在Java上也有啊
06/18 11:08, 4F

06/18 11:23, 5年前 , 5F
06/18 11:23, 5F

06/18 11:23, 5年前 , 6F
其實解法出乎意料地簡單 :P
06/18 11:23, 6F

06/18 16:30, 4年前 , 7F
原來GC已經克服這問題了,感謝解惑
06/18 16:30, 7F

06/18 16:48, 4年前 , 8F

06/18 16:48, 4年前 , 9F
附上 Python 版本的
06/18 16:48, 9F

06/18 22:23, 4年前 , 10F
不過smart ptr有著效能上的優點 但是很容易誤用 XD
06/18 22:23, 10F
文章代碼(AID): #1T1vUTAO (C_and_CPP)
文章代碼(AID): #1T1vUTAO (C_and_CPP)