首页 > 代码库 > 实现一个简单的shared_ptr
实现一个简单的shared_ptr
template <typename T> class shared_ptr { public: explicit shared_ptr (T *ptr): mPtr(ptr), cnt(new int(1)){} shared_ptr(const shared_ptr& rhs): mPtr(rhs.mPtr), cnt(rhs.cnt){ ++*cnt; } shared_ptr& operator = (const shared_ptr&); ~shared_ptr(); T& operator *() { return *mPtr; } T* operator -> () { return mPtr; } void reset(T* ptr); T* get() const { return mPtr; } private: T* mPtr; int *cnt; }; template <typename T> shared_ptr<T>& shared_ptr<T>::operator=(const shared_ptr& rhs) { if (this == &rhs) return *this; --*cnt; if (*cnt == 0) { delete mPtr; delete cnt; } cnt = rhs.cnt; ++*cnt; mPtr = rhs.mPtr; return *this; } template <typename T> void shared_ptr<T>::reset(T* ptr) { --*cnt; if (*cnt == 0) { delete mPtr; delete cnt; } cnt = new int(1); mPtr = ptr; } template <typename T> shared_ptr<T>::~shared_ptr() { --*cnt; if (*cnt == 0) { delete mPtr; delete cnt; } }
实现一个简单的shared_ptr
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。