首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android中的sp跟wp指针

2012-10-20 
Android中的sp和wp指针经常会在android的framework代码中发现spxxx和wpxxx这样的指针,平时看的时候都

Android中的sp和wp指针

经常会在android的framework代码中发现sp<xxx>和wp<xxx>这样的指针,平时看的时候都把他当成一个普通的指针封装过掉了,这几天终于忍不住了,想深入了解一下。

?

相关的代码:

frameworks/base/include/utils/RefBase.h

frameworks/base/libs/utils/RefBase.cpp

?

sp和wp都是一个模板类,看一下sp类的定义:

?

?

?其中weakref_type是RefBase的内嵌类,weakref_impl则是weakref_type的子类,RefBase的大部分工作都是交由weakref_impl类来完成,通过RefBase的成员变量weakref_impl* const mRefs。查看其中一个sp的构造函数:

?

?

????????extendObjectLifetime(OBJECT_LIFETIME_WEAK);??
  • ????}??

    ?

    ?

    这时的打印结果是:

    D/sp-wp-sample(? 217): WPTest constructor
    D/sp-wp-sample(? 217): promote to strong ptr...
    D/sp-wp-sample(? 217): first weak ptr ref callbac
    D/sp-wp-sample(? 217): strong ptr's lifetime is j
    D/sp-wp-sample(? 217): last strong ptr ref callba
    D/sp-wp-sample(? 217): weak ptr's lifetime is j
    D/sp-wp-sample(? 217): last weak ptr ref callback
    D/sp-wp-sample(? 217): WPTest destructor
    D/sp-wp-sample(? 217): weak ptr is out of scope.

    ?

    可以看出现在只有当强引用和弱引用的计数都为0时,WPTest对象才会被销毁。


  • 热点排行