您的位置:首页 > 移动开发 > Android开发

android智能指针的原理

2017-02-13 10:23 225 查看
看android的C++的代码到处都是智能指针:

一直看不懂类似的代码:

sp<ICrypto> makeCrypto() {

    sp<IServiceManager> sm = defaultServiceManager();

    sp<IBinder> binder = sm->getService(String16("media.drm"));

}

sm是个sp对象,它怎么有成员函数getService?

仔细研究sp的代码:

template<typename T>

class sp {

public:

    inline  T&      operator* () const  { return *m_ptr; }

    inline  T*      operator-> () const { return m_ptr;  }

    inline  T*      get() const         { return m_ptr; }

private:

    T* m_ptr;

};

上面应该是重载了 ->运算符,当调用“->”时就是调用了{return m_ptr;}

这样上面的代码就可以理解了。

另外:对象的生命周期是怎样通过sp控制的?

1. 当使用defaultServiceManager()的返回值作为参数构建 sp对象时:

调用了构造函数:其中调用了对象的incStrong函数增加了引用

template<typename T>

sp<T>::sp(T* other)

        : m_ptr(other) {

    if (other)

        other->incStrong(this);

}

2. sm是临时的局部变量,当函数退出时会调用sm的析构函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐