⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smartpointer.h

📁 Android 一些工具
💻 H
字号:
/* *  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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -