WebKit中的智能指针

1 篇文章 0 订阅

前几天看了下webkit里的几种常用的智能指针代码,小结一下


RefCounted:

提供引用计数器功能。使用时继承之

class Foo : public RefCounted<Foo>

为了更为方便安全地使用引用计数功能,webkit提供了RefPtr。

ThreadSafeShared

多线程版本的引用计数


RefPtr / PassRefPtr

保存支持引用计数的指针(如RefCount,ThreadSafeShared等子类, 又如StringImpl),防止cyclic references?
RefPtr 与 PassRefPtr 基本类似,区别在于作为参数进行传递时引用计数的变化。
RefPtr 作为参数对 RefPtr 和 PassRefPtr 进行赋值或构造,会对参数 RefPtr 的指针增加引用计数。
PassRefPtr 作为参数对 RefPtr 和 PassRefPtr 进行构造或赋值,会转移指针拥有权,故参数 PassRefPtr 那个指针的引用计数不变。
当然,赋值操作会减少被赋值对象原先拥有的指针的引用计数。

用指针构造RefPtr和PassRefPtr会增加其引用计数。

PassRefPtr<T>::leakRef():     交出拥有权
adoptRef():                                构造PassRefPtr,仅获得指针拥有权
RefPtr::release():                      拥有权转移给PassRefPtr(返回值)


一般推荐使用 RefPtr, 但是在作为参数传递或作为返回值的时候,使用 PassRefPtr更为高效, 因为这两种情况编译器会生成临时变量, 若用 RefPtr, 就会多一次引用计数的增减(临时变量构造和销毁)。


OwnPtr / PassOwnPtr

不采用引用计数方式,可以保存一般的指针. 一个指针只能被一个 OwnPtr 或 PassOwnPtr 唯一拥有, 采用摧毁式拷贝策略, 类似std::auto_ptr


参考文献

源代码

http://obiwong.is-programmer.com/posts/21756.html



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值