GC陷阱

9 篇文章 0 订阅

都说C++的很容易内存泄漏,所以有了GC。有了GC,爸妈再也不用担心我的学习(J)。但是使用GC也有几个大陷阱要注意。

 

第一个是资源被一直引用。当然都是无意中造成(谁会存心这么做?拉出去突突了)。

常见的就是event的handler;有用+=,但是忘了-=。如果handler中有大量资源,而且不再被使用了,也会造成内存“泄露”。

还有就是一些static的引用,它们的生命周期一直到app推出;被他们引用的resource,不论会不会再次使用,都不会被释放。

 

第二个是weak reference。

因为担心上面的问题,比如,一些static的引用, 变成了weakreference。

Weak references are useful for objects that use a lot of memory, but can be recreated easily if they are reclaimed by garbage collection.

这样一来,新的问题又来了(怎么没有完美无暇的方案呢?有没有银弹?)。有些你想用的object,(可能迟了点),GC先reach了就会被释放。

可以看看下面的链接,一个不错的例子。

http://stackoverflow.com/questions/2281566/is-josh-smiths-implementation-of-the-relaycommand-flawed

 


如果使用GC不当,C++其中的两大经典问题(memory leak, invalid memoryaccess)还是会不时来骚扰你!

所以GC虽好,也不要乱用哦!


Weak Event Patterns - http://msdn.microsoft.com/en-us/library/aa970850.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值