//简单模拟实现boost库下的shared_ptr #include <iostream> #include <string.h> using namespace std; class shared_ptr_Rep { friend class shared_ptr; public: shared_ptr_Rep(const char *str = " ") :count(0) { px = new char[strlen(str) + 1]; strcpy(px, str); } ~shared_ptr_Rep() { delete[]px; } public: void increment() { count++; } void decrement() { if (--count == 0) { delete this;// 哪一个rep的count为0了释放当时的rep } } char* get() { return px; } private: char *px; int count; }; ////////////////////////////////////////////////////////////////////// class shared_ptr { public: shared_ptr(const char *str = " ") :rep(new shared_ptr_Rep(str)) { rep->increment(); } shared_ptr(const shared_ptr &s) :rep(s.rep) { rep->increment(); } shared_ptr& operator=(const shared_ptr &s) { if (this != &s) { rep->decrement(); // 迭代器 rep = s.rep; rep->increment(); } return *this; } ~shared_ptr() { rep->decrement(); } public: char& operator*() { return *(rep->px); } char* operator->() { return rep->px; } private: shared_ptr_Rep *rep; }; int main() { char *p = new char('a'); char *q = new char('b'); shared_ptr s1(p); cout << *s1 << endl; shared_ptr s2 = s1; cout << *s2 << endl; shared_ptr s3(q); s3 = s2; cout << *s3 << endl; shared_ptr s4(q); cout << *s4 << endl; shared_ptr s5 = s4; cout << *s5 << endl; return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2025-01-17 22:29:14