作者KanzakiHAria (神崎・H・アリア)
看板C_and_CPP
标题Re: [问题] shared_ptr如何避免cyclic reference?
时间Mon Jun 17 21:37:31 2019
就算是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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1560778653.A.298.html
1F:→ littleshan: 呃,GC 是可以解决 cyclic reference 的,实务上因为 06/18 08:42
2F:→ littleshan: cyclic 太常见,所以大部分语言都是用 GC 而不是 smar 06/18 08:42
3F:→ littleshan: t pointer。 06/18 08:42
4F:推 eye5002003: GC如何解决的?这问题在Java上也有啊 06/18 11:08
6F:→ Killercat: 其实解法出乎意料地简单 :P 06/18 11:23
7F:推 eye5002003: 原来GC已经克服这问题了,感谢解惑 06/18 16:30
9F:→ CMJ0121: 附上 Python 版本的 06/18 16:48
10F:→ Killercat: 不过smart ptr有着效能上的优点 但是很容易误用 XD 06/18 22:23