请问android遍地都是的sp有关问题
请教android遍地都是的sp问题
刚开始看android,刚开始接触c++,之前有c经验
发现相差还是蛮大的
在看stagefright,现请教两个问题
1. sp<MediaPlayerBase> p
这是一个类模板吧,这个用到烂的sp到底有什么神奇的功效?或者说为什么要这样用?
2.sp<MediaPlayerBase> p; p = new StagefrightPlayer;
这我就奇怪了,p是一个对象,对象能直接指向一个地址?不应该是*p吗?
以上两个问题,请帮忙解答,非常感谢。
------解决方案--------------------
sp就是为了安全删除内存和防止内存泄露。。。上百度上查c++智能指针或者强引用,比我给你解释要好的多。
第二个问题是因为sp重载了=方法,这样其实是sp里的指针被赋值了。
rameworks/native/include/utils/StrongPointer.h
template<typename T>
sp<T>& sp<T>::operator = (T* other)
{
if (other) other->incStrong(this);
if (m_ptr) m_ptr->decStrong(this);
m_ptr = other;
return *this;
}
刚开始看android,刚开始接触c++,之前有c经验
发现相差还是蛮大的
在看stagefright,现请教两个问题
1. sp<MediaPlayerBase> p
这是一个类模板吧,这个用到烂的sp到底有什么神奇的功效?或者说为什么要这样用?
2.sp<MediaPlayerBase> p; p = new StagefrightPlayer;
这我就奇怪了,p是一个对象,对象能直接指向一个地址?不应该是*p吗?
以上两个问题,请帮忙解答,非常感谢。
------解决方案--------------------
sp就是为了安全删除内存和防止内存泄露。。。上百度上查c++智能指针或者强引用,比我给你解释要好的多。
第二个问题是因为sp重载了=方法,这样其实是sp里的指针被赋值了。
rameworks/native/include/utils/StrongPointer.h
template<typename T>
sp<T>& sp<T>::operator = (T* other)
{
if (other) other->incStrong(this);
if (m_ptr) m_ptr->decStrong(this);
m_ptr = other;
return *this;
}