对android的sp和wp的学习

回主页

最近在看android的binder,而binder的native层用了好多智能指针sp和wp,我现在把sp的代码先贴出来,方便以后研究一下它。

template<typename T>        // 这里模板中的typename和class的区别是什么?
class sp {
public:
   inline sp() : m_ptr(0) { }     // 构造函数搞成inline,是在是匪夷所思,内不一定有不了解的地方

   sp(T* other);
   sp(const sp<T>& other); //对应于方法1
   template<typename U> sp(U* other);                                                // 这里的U代表什么含义
   template<typename U> sp(const sp<U>& other);                              // 这里的U代表什么含义

   ~sp();

   sp& operator = (T* other); //对应于方法2
   sp& operator = (const sp<T>& other);

   template<typename U> sp& operator = (const sp<U>& other);        // 这两个是啥意思
   template<typename U> sp& operator = (U* other);                            // 这两个是啥意思

   void force_set(T* other);
   void clear(); //重置

   //重载Accessors
   inline  T&      operator* () const  { return *m_ptr; }
   inline  T*      operator-> () const { return m_ptr;  }
   inline  T*      get() const         { return m_ptr; }

   //操作符    
   COMPARE(==)    // compare又是啥意思
   COMPARE(!=)
   COMPARE(>)
   COMPARE(<)
   COMPARE(<=)
   COMPARE(>=)

private:
    template<typename Y> friend class sp;
    template<typename Y> friend class wp;
    void set_pointer(T* ptr);
    T* m_ptr; //指针
};
回主页