免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: xyfree
打印 上一主题 下一主题

删帖吧 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
21 [报告]
发表于 2011-07-29 14:38 |只看该作者
每个对象,都加入一个 “双向链表” 当铰链。
每个指针,也加入一个 “双向链表” 当铰链。
   
  struct 铰链
  {
       struct 铰链 *next;
       struct 铰链 *prev;
  };

对象,和所有指向它的指针,通过这些铰链,连接成一个环。

当有一个新的指针引用该对象,“环” 上就多一个指针,于是环长度自动 +1。
当释放一个指针时,““环” 上就少一个指针,于是环长度自动 -1。
释放一个指针时,发现环长度变为1(仅剩下对象本身),就释放对象。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
22 [报告]
发表于 2011-07-29 14:42 |只看该作者
本帖最后由 群雄逐鹿中原 于 2011-07-29 14:58 编辑

想错了。我这个双向链表法,不是对付循环引用的。
不过我想用类似的办法,可以构造出能对付“循环” 的指针来。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:45
23 [报告]
发表于 2011-07-29 15:42 |只看该作者
回复 22# 群雄逐鹿中原

这个方法好像在哪里见过,能够实现引用计数不能实现的一个啥功能,具体干啥记不清了~~~

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
24 [报告]
发表于 2011-07-29 15:52 |只看该作者
回复 23# koolcoy

MCD上有提过。
使用计数器的非侵入式引用计数方式需要动态分配计数器; 而且通常还会使用异常来报告分配失败。
使用双链的引用计数不需要动态内存分配, 不会有C++异常。
但其实嘛……  stackoverflow 一旦发生…… 都懂的……

论坛徽章:
0
25 [报告]
发表于 2011-07-30 11:24 |只看该作者
如果有N个两两互相引用的智能指针,只有两个对外访问点,可以
看成用两个手提着的一串珠子,两手松开,珠子落地,析够,析够
自然从最后松开的手处开始。第一个手松开时,如何知道还有一个
手提着珠子呢。

论坛徽章:
0
26 [报告]
发表于 2011-07-30 16:46 |只看该作者
本帖最后由 xyfree 于 2012-01-21 03:33 编辑

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP