四、wp升级为sp的过程
wp的定义包含了:sp<T> promote() const;
template<typename T>
sp<T> wp<T>::promote() const
{
return sp<T>(m_ptr, m_refs);
}
wp,sp互为友元类,这里promote就是以友元身份调用了sp<Binder>类的构造函数: sp(T* p, weakref_type* refs);
template<typename T>
sp<T>::sp(T* p, weakref_type* refs)
: m_ptr((p && refs->attemptIncStrong(this)) ? p : 0)
{
}
这里如果升级成功,那么将会产生一个sp对象指向目标对象,原来的wp仍然存在。
如果升级不成功,返回NULL
看看关键函数refs->attemptIncStrong(this)
Android智能指针sp wp详解(4)
内容版权声明:除非注明,否则皆为本站原创文章。