代码
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。