最近在看android的binder,而binder的native层用了好多智能指针sp和wp,我现在把sp的代码先贴出来,方便以后研究一下它。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40template<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; //指针
};