smartpointer.h

来自「Android 一些工具」· C头文件 代码 · 共 171 行

H
171
字号
/* *  smartpointer.h *  Android   * *  Copyright 2005 The Android Open Source Project * */#ifndef ANDROID_SMART_POINTER_H#define ANDROID_SMART_POINTER_H#include <stdint.h>#include <sys/types.h>#include <stdlib.h>// ---------------------------------------------------------------------------namespace android {// ---------------------------------------------------------------------------#define COMPARE(_op_)                                           \inline bool operator _op_ (const sp<T>& o) const {              \    return m_ptr _op_ o.m_ptr;                                  \}                                                               \inline bool operator _op_ (const T* o) const {                  \    return m_ptr _op_ o;                                        \}                                                               \template<typename U>                                            \inline bool operator _op_ (const sp<U>& o) const {              \    return m_ptr _op_ o.m_ptr;                                  \}                                                               \template<typename U>                                            \inline bool operator _op_ (const U* o) const {                  \    return m_ptr _op_ o;                                        \}// ---------------------------------------------------------------------------template <typename T>class sp{public:    inline sp() : m_ptr(0) { }    sp(T* other);    sp(const sp<T>& other);    template<typename U> sp(U* other);    template<typename U> sp(const sp<U>& other);    ~sp();        // Assignment    sp& operator = (T* other);    sp& operator = (const sp<T>& other);        template<typename U> sp& operator = (const sp<U>& other);    template<typename U> sp& operator = (U* other);        // Reset    void clear();        // Accessors    inline  T&      operator* () const  { return *m_ptr; }    inline  T*      operator-> () const { return m_ptr;  }    inline  T*      get() const         { return m_ptr; }    // Operators            COMPARE(==)    COMPARE(!=)    COMPARE(>)    COMPARE(<)    COMPARE(<=)    COMPARE(>=)private:        template<typename Y> friend class sp;    T*              m_ptr;};// ---------------------------------------------------------------------------// No user serviceable parts below here.template<typename T>sp<T>::sp(T* other)    : m_ptr(other){    if (other) other->incStrong(this);}template<typename T>sp<T>::sp(const sp<T>& other)    : m_ptr(other.m_ptr){    if (m_ptr) m_ptr->incStrong(this);}template<typename T> template<typename U>sp<T>::sp(U* other) : m_ptr(other){    if (other) other->incStrong(this);}template<typename T> template<typename U>sp<T>::sp(const sp<U>& other)    : m_ptr(other.m_ptr){    if (m_ptr) m_ptr->incStrong(this);}template<typename T>sp<T>::~sp(){    if (m_ptr) m_ptr->decStrong(this);}template<typename T>sp<T>& sp<T>::operator = (const sp<T>& other) {    if (other.m_ptr) other.m_ptr->incStrong(this);    if (m_ptr) m_ptr->decStrong(this);    m_ptr = other.m_ptr;    return *this;}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;}template<typename T> template<typename U>sp<T>& sp<T>::operator = (const sp<U>& other){    if (other.m_ptr) other.m_ptr->incStrong(this);    if (m_ptr) m_ptr->decStrong(this);    m_ptr = other.m_ptr;    return *this;}template<typename T> template<typename U>sp<T>& sp<T>::operator = (U* other){    if (other) other->incStrong(this);    if (m_ptr) m_ptr->decStrong(this);    m_ptr = other;    return *this;}template<typename T>void sp<T>::clear(){    if (m_ptr) {        m_ptr->decStrong(this);        m_ptr = 0;    }}// ---------------------------------------------------------------------------}; // namespace android// ---------------------------------------------------------------------------#endif // ANDROID_SMART_POINTER_H

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?