【面试题 & C++】实现智能指针

代码

template<class T>
class SmartPointer{
public:
    SmartPointer():m_Pointer(nullptr), m_RefPointer(nullptr) {}
    SmartPointer(T* target):m_Pointer(target), m_RefPointer(nullptr) {
        addReference();
    }
    SmartPointer(const SmartPointer<T>& from):m_RefPointer(from.m_RefPointer), m_Pointer(fromt.m_Pointer) {
        addReference();
    }
    ~SmartPointer(){
        removeReference();
    }
    void addReference() {
        if (m_RefPointer) (*m_RefPointer)++;
        else m_RefPointer = new int(1);
    }
    void removeReference() {
        if (m_RefPointer) {
            (*m_RefPointer)--;
            if ((*m_RefPointer) == 0) {
                delete m_RefPointer;
                delete m_Pointer;
                m_RefPointer = nullptr;
                m_Pointer = nullptr;
            }
        }
    }
    SmartPointer<T>& operator = (const SmartPointer<T>& that){
    if (this != &that){
        removeReference();
        this->m_Pointer = that.m_Pointer;
        this->m_RefPointer = that.m_RefPointer;
        addReference();
    }
    return *this;
}
private:
    T* m_Pointer;
    int* m_RefPointer;
};

参考链接:https://blog.imalan.cn/archives/322/

发布了340 篇原创文章 · 获赞 10 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/iCode_girl/article/details/105657437