Android智能指针(四):wp

代码

wp<A>wpA(spA); // 见 ④

之前我们说到了现在mRefs中的引用计数其实已经是S1W1,那么我们接着往下看wp的创建。
wp的创建和sp的创建一样,也是有很多的创建方式,具体的还是可以从源码中看到,我们这里就直接分析例子中的吧。

template<typename T>
wp<T>::wp(T* other)
    : m_ptr(other)
{
    if (other) m_refs = other->createWeak(this);
}

将other传给m_ptr进行保存。同时创建weak,那么我们看一下createweak进行了什么样的操作。

RefBase::weakref_type* RefBase::createWeak(constvoid* id) const
{
 mRefs->incWeak(id);
 returnmRefs;  //返回影子对象本身
}

调用影子对象的incWeak,这个我们刚才讲过了,将导致影子对象的弱引用计数增加1,那么现在影子对象的结果就是S1W2。