#include <bits/stdc++.h> using namespace std; class Count { private: int cnt; public: Count() :cnt(1) {} ~Count() = default; void addcount() { ++cnt; } int getcount() { return cnt; } int reducecount() { return --cnt; } }; template <typename T> class Shared_ptr { private: T* ptr; Count* cnt; public: //构造函数 Shared_ptr(T* pt = nullptr) : ptr(pt) { if (pt) cnt = new Count(); } //析构函数 ~Shared_ptr() { if (ptr && !cnt -> reducecount()) { delete ptr; delete cnt; } } //拷贝构造函数 Shared_ptr(Shared_ptr<T>& sptr) { ptr = sptr.ptr; if (ptr) { cnt = sptr.cnt; cnt -> addcount(); } } //移动构造函数 Shared_ptr(Shared_ptr<T>&& sptr) { ptr = sptr.ptr; if (ptr) { cnt = sptr.cnt; sptr.ptr = nullptr; sptr.cnt = nullptr; } } //拷贝构造运算符 Shared_ptr& operator=(Shared_ptr& sptr) { ptr = sptr.ptr; if (ptr) { cnt = sptr.cnt; cnt -> addcount(); } return *this; } Shared_ptr& operator=(Shared_ptr<T>&& sptr) { ptr = sptr.ptr; if (ptr) { cnt = sptr.cnt; sptr.ptr = nullptr; sptr.cnt = nullptr; } return *this; } long use_count() { if (ptr) return cnt -> getcount(); return 0; } }; int main() { Shared_ptr<int> p1(new int(10)); cout << p1.use_count() << endl; Shared_ptr<int> p2(p1); cout << p2.use_count() << endl; return 0; }
标签:cnt,return,int,Shared,shared,sptr,ptr,指针 From: https://www.cnblogs.com/yzqiang/p/17705990.html