刚开始看android,刚开始接触c++,之前有c经验
发现相差还是蛮大的
在看stagefright,现请教两个问题
1. sp<MediaPlayerBase> p
这是一个类模板吧,这个用到烂的sp到底有什么神奇的功效?或者说为什么要这样用?2.sp<MediaPlayerBase> p; p = new StagefrightPlayer;
这我就奇怪了,p是一个对象,对象能直接指向一个地址?不应该是*p吗?以上两个问题,请帮忙解答,非常感谢。

解决方案 »

  1.   

    sp就是为了安全删除内存和防止内存泄露上百度上查c++智能指针或者强引用,比我给你解释要好的多。第二个问题是因为sp重载了=方法,这样其实是sp里的指针被赋值了。
    rameworks/native/include/utils/StrongPointer.htemplate<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;
    }