关于智能指针。
#include <iostream>#include <cstdlib>using namespace std;class HasPtr;class U_Ptr{ friend class HasPtr; int *ip; size_t use; U_Ptr(int *p):ip(p),use(1){} ~U_Ptr(){delete ip;}};class HasPtr{public: HasPtr(int *p,int i):ptr(new U_Ptr(p)),val(i) { cout<<"构造"<<endl; } HasPtr(const HasPtr &orig):ptr(orig.ptr),val(orig.val) { ++ptr->use; cout<<"初始化"<<endl; } HasPtr &operator=(const HasPtr&); ~HasPtr() { if(--ptr->use==0) delete ptr; cout<<"析构"<<endl; } int geti(){return val;}private: U_Ptr *ptr; int val;};HasPtr& HasPtr::operator=(const HasPtr &rhs){ ++rhs.ptr->use; if(--ptr->use==0) delete ptr; ptr=rhs.ptr; val=rhs.val; cout<<"="<<endl; return *this;}int main(){ int i=0; int *p=&i; HasPtr a(p,2); HasPtr b(a); HasPtr c=a; cout<<a.geti()<<endl; return 0;}