Re: [问题] shared_ptr如何避免cyclic reference?

楼主: KanzakiHAria (神崎・H・アリア)   2019-06-17 21:37:31
就算是Garbage collector来也一样不能解
有问题的设计就是有问题
程式语言的工具只是减轻写程式的人负担 并不会解决任何问题
你个问题就好比写了一个暴力算法 问std::algorithm能不能加速到O(1)
※ 引述《eye5002003 (下一夜)》之铭言:
: 可以自由传递指标的 std::shared_ptr 比传统指标要安全许多
: 但即使如此也还是有cyclic reference的问题存在
: 网络上查到的解法几乎都用 weak_ptr 来处理
: 但是我怎么看都不觉得这算解法
: 因为它无法阻止物件被释放
: 之所以要使用 std::shared_ptr 就是希望抓着指标就一定能使用所指的物件
: 我自己目前的做法是对物件分层级
: 只有高层物件可以拥有指标指向下层物件
: 确保不会连成一圈
: 这方式我还没看到明显的问题
: 但是这种自我约束的行为还是很不可靠
: 一个不小心包成std::function之类的东西然后乱丢可能就发生
: 而且一旦出现cyclic也很难查觉
: 因为它就只是安静的咬著内存不放
: 不知道有没有更理想的处理方式?
: 或者有比 shared_ptr 更好的工具也可以介绍一下
作者: littleshan (我要加入剑道社!)   2019-06-18 08:42:00
呃,GC 是可以解决 cyclic reference 的,实务上因为cyclic 太常见,所以大部分语言都是用 GC 而不是 smart pointer。
作者: eye5002003 (下一夜)   2019-06-18 11:08:00
GC如何解决的?这问题在Java上也有啊
作者: Killercat (杀人猫™)   2019-06-18 11:23:00
Java的例子 : http://tinyurl.com/px38myt其实解法出乎意料地简单 :P
作者: eye5002003 (下一夜)   2019-06-18 16:30:00
原来GC已经克服这问题了,感谢解惑
作者: CMJ0121 (请多指教!!)   2019-06-18 16:48:00
作者: Killercat (杀人猫™)   2019-06-18 22:23:00
不过smart ptr有着效能上的优点 但是很容易误用 XD

Links booklink

Contact Us: admin [ a t ] ucptt.com