C++内存管理(三)

前面讲的技术都只是处理简单的情况:出了某一个作用域,对象就被释放;另一个对象被释放的时候,他管理的对象都被释放。实际的程序里经常会有更复杂的情况出现,对象之间互相引用,形成一张网。一个对象会被好几个其他对象用到,你又不能规定出简单的规则,怎么办呢?
常用的一个办法就是引用计数,你可以自己写一点代码来实现,并不难。COM用的就是这个办法。
Boost有这方面的支持,shared_ptr非常好用,随便什么对象都可以;intrusive_ptr也不麻烦。

引用计数的问题在环:最简单的父窗口有子窗口的指针,子窗口也有一个父窗口的指针,所以他们两个的引用计数至少是一,总也到不了零,也就释放不掉。解决的办法是weak_ptr之类的,至少一个方向上不增加计数。
再有引用太多了,计数器溢出也会造成问题。

其实C也有像Java或者C#那样的自动内存管理机制,比如 这一个。对有些应用可能有点慢,至少可以用来在调试版本里检查内存泄漏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值