//智能指针采用的是代理模式,接口相同,功能不同(辅助类方法)
#include <iostream>
using namespace std;
template <typename T>
class SmartPtr;
template <typename T>
class U_Ptr
{
private:
friend class SmartPtr<T>;
U_Ptr(T *ptr) : p(ptr), count(1) {} //创建一个指针,并记为1
~U_Ptr() {delete p;}
int count;
T *p;
public:
int getcount () { return count; }
};
template <typename T>
class SmartPtr
{
private:
U_Ptr<T> *rp; //一个U_ptr的指针
public:
SmartPtr(T *ptr) : rp(new U_Ptr<T>(ptr)) { }
SmartPtr(const SmartPtr<T> &sp) : rp(sp.rp)
{
++rp -> count;
}
SmartPtr& operator=(const SmartPtr<T>& rhs)
{
++rhs.rp -> count;
if (--rp -> count == 0)
delete rp;
rp = rhs.rp;
return *this;
}
~SmartPtr()
{
if (--rp->count == 0)
delete rp;
cout << rp->count << " pointers left" << endl;
}
T& operator* () {return *(rp -> p);}
T* operator ->() {return rp -> p;}
void out_count() { cout << "The number of pointers right now is : " << rp -> getcount() << endl;}
};
int main()
{
SmartPtr<int> ptr1(new int(2));
ptr1.out_count();
SmartPtr<int> ptr2(ptr1);
ptr2.out_count();
SmartPtr<int> ptr3 = ptr2;
ptr3.out_count();
cout << *ptr1 << endl;
*ptr1 = 20;
cout << *ptr2 << endl;
return 0;
}
c++智能指针
最新推荐文章于 2025-05-13 18:28:53 发布