关于vp中的内存自动回收机制的看法

    在vp中,采用了对指针指向内存的自动回收机制。在vp中,所有的vp的类实例都有一个计数器,用来存放实例当前被引用的次数。当创建一个实例之后,这个实例的引用数被自动设置成0,如果这个实例被别的实例所引用,则计数器自动加1。反之,计数器减1。当计数器的值为0时,则实例的内存被自动删除。vp会对实例计数器的增加分为显世和隐式,显示通常是用户在代码中调用ref()函数实现。当使用完毕时,调用unref()函数使计数器减1。隐式一般是在这个实例被加载到了别的父节点上时,计数器会自动加1。当从父节点删除时,会自动减1。例如,你动态创建了一个channel,这时计数器的值为0,然后把它加入到某个windows的下面,则计数器加1;反之,当你把它从windows下面删除的时候,则计数器自动减1,当计数器的值为0,则自动回收。

  看起来,好像有这么个机制似乎很好。如,你在你的构造函数中把vp的类实例初始化,并且手动计数器加1。在类的析构函数中,使计数器减1。这样,当你的主线程推出之前,vp便会把计数器为0的实例的内存自动回收。并且,由于最后在析构函数中才手动减掉了构造函数中加的1,这样也可以保证类实例有着健全的生命周期。但,如果vp的类实例只是被引用一次的话,我想这个机制也就没什么意义了,但在多次引用中,每次都让用户手工加加减减,难免写错造成内存泄露,还不如直接让用户new和delete来的便捷。当然,加加减减后还有个vuAllocTracer类实例帮你检查是否泄露,这还是不错的。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值