C++线程安全的智能指针

smart_ptr.hpp

#pragma once
#include <cstdint>
#include <memory>

template <class T>
class smart_ptr {
private:
    T* _obj;
    uint32_t _count;

    void add();
    void dec();
protected:
public:
    smart_ptr(T* obj_);
    smart_ptr(const smart_ptr&);
    smart_ptr& operator =(const smart_ptr&);
    ~smart_ptr();
};

template <class T>
inline smart_ptr<T>::smart_ptr(T* obj_) : _obj(obj_), _count(1) {}

template <class T>
inline smart_ptr<T>::smart_ptr(const smart_ptr& that) {
    memcpy_s(this, sizeof(smart_ptr), &that, sizeof(smart_ptr));
    add();
}

template <class T>
inline smart_ptr<T>& smart_ptr<T>::operator =(const smart_ptr& that) {
    if (&that == this) {
        return *this;
    }
    dec();
    memcpy_s(this, sizeof(smart_ptr), &that, sizeof(smart_ptr));
    add();
    return *this;
}

template <class T>
inline smart_ptr<T>::~smart_ptr() {
    dec();
}

template <class T>
inline void smart_ptr<T>::add() {
    _MT_INCR(_count);
}

template <class T>
inline void smart_ptr<T>::dec() {
    if (_MT_DECR(_count) == 0) {
        delete _obj;
    }
}

采用引用计数的方式进行管理,简单明了


inline smart_ptr<T>::smart_ptr(T* obj_) : _obj(obj_), _count(1) {}

猜你喜欢

转载自www.cnblogs.com/muzzik/p/12825136.html