社区
C++ 语言
帖子详情
一个设计问题:如何在C/C++中释放循环引用的对象(垃圾回收)
tutu_cloud
2007-07-31 04:51:07
当出现循环引用的情况下,使用计数方式的智能指针无法自动释放对象。那么怎样才能释放这样的对象,或者说设计的时候就不应该出现循环引用?如果说不应该出现循环引用的话,那么在一个足够复杂的系统中,如何才能避免出现循环引用?
...全文
429
9
打赏
收藏
一个设计问题:如何在C/C++中释放循环引用的对象(垃圾回收)
当出现循环引用的情况下,使用计数方式的智能指针无法自动释放对象。那么怎样才能释放这样的对象,或者说设计的时候就不应该出现循环引用?如果说不应该出现循环引用的话,那么在一个足够复杂的系统中,如何才能避免出现循环引用?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
赵增光
2010-05-21
打赏
举报
回复
参见Python源代码,过程为:复制引用链,获得根集,标记,回收。该方法效率低,但最简单。
星羽
2007-08-01
打赏
举报
回复
当出现循环引用的情况下,使用计数方式的智能指针无法自动释放对象?
A B 循环引用
这个时候 A B 的计数都是2
当释放 A
A B 的计数都为 1
你是想让B的A引用也释放吗?
星羽
2007-08-01
打赏
举报
回复
从设计上解决吧
北极猩猩
2007-08-01
打赏
举报
回复
除了循环引用的问题之外,引用计数还有一个很大的性能缺陷。
那就是在枚举容器中对象的时候,每次都要增加、减少引用计数,如果你的枚举操作很多的话还是很浪费的。
晨星
2007-07-31
打赏
举报
回复
这是引用计数的一个先天的缺陷吧。
所以引用计数的垃圾回收现在也不大被人看好了,包括在Java虚拟机的设计中。实际上,基于引用计数的垃圾回收效率也并不高过其它方式。
Vitin
2007-07-31
打赏
举报
回复
如果出现了循环引用,那么大概可以归结为一个设计错误。
对于聚合关系(aggregation)而言,“你中有我、我中有你”的情况是不允许的。
你可以检查看看。一般情况下,其中一处不应该用智能指针表示聚合关系,而应该用内建指针表示单纯的关联关系(association),不需要随主对象一起释放。
Inhibitory
2007-07-31
打赏
举报
回复
这种情况尽量避免吧。
jixingzhong
2007-07-31
打赏
举报
回复
等新的吧 ...
只能尽量避免这种无奈的问题了 ...
taodm
2007-07-31
打赏
举报
回复
没办法,靠人脑设计的时候就避免。还是等c++09标准的垃圾回收吧。
内存泄露Demo leaky app
4. 注意
循环
引用
:在使用
引用
计数的系统
中
,如Objective-C或Swift
中
的强
引用
循环
,可能导致内存泄露。使用弱
引用
打破
循环
可以解决此
问题
。 在“PropMemFun”这个文件
中
,可能包含了一些关于内存管理和泄露检测的...
垃圾回收
器如何处理
循环
引用
垃圾回收
是一门编程语言
中
...在编程语言
中
,普遍存在着
循环
引用
这样的
问题
,
垃圾回收
器是如何处理
循环
引用
呢,常用的
垃圾回收
有
引用
计数和
引用
对象
遍历两种实现,它们各自又是如何处理
循环
引用
呢?本文讲以JVM
中
的GC...
【详解】JVM——
垃圾回收
之
对象
引用
目录什么是
垃圾回收
?C/
C++
语言的
垃圾回收
Java语言的
垃圾回收
五种
引用
...在C/
C++
语言
中
,没有自动
垃圾回收
机制,是通过new关键字申请内存资源,通过delete关键字
释放
内存资源。 如果,程序员在某些位置没有写...
自动
垃圾回收
学习笔记
在C/
C++
这类没有自动
垃圾回收
机制的语言
中
,
一个
对象
如果不再使用,需要手动
释放
,否则就会出现内存泄漏。我们称这种
释放
对象
的过程为
垃圾回收
,而需要程序员编写代码进行回收的方式为手动回收。内存泄漏指的是不再...
JavaScript
中
的
垃圾回收
机制(GC)
没有被
引用
的
对象
被销毁,内存被
释放
,就是
垃圾回收
。 C、
C++
等编程语言需要手动
垃圾回收
。 Java、JavaScript、PHP、Python 等变成语言自动
垃圾回收
。 ③ 变量的生命周期(何时会被回收) 全局变量: 整个脚本执行...
C++ 语言
65,210
社区成员
250,518
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章