最近重新检查自己的基本功,照着博客敲了敲智能指针的实现 参考这里 http://blog.csdn.net/hackbuteer1/article/details/7561235 讲的通俗易懂啊
代码
#include <iostream>
using namespace std;
class U_Ptr{
friend class HasPtr;
int *ip;
size_t use;
U_Ptr(int *p):ip(p),use(1){cout<<"U_Ptr constructor called"<<endl;}
~U_Ptr(){delete ip;cout<<"U_Ptr distructor called!"<<endl;}
};
class HasPtr{
private:
U_Ptr* ptr;
int val;
public:
HasPtr(int *p,int i):ptr(new U_Ptr(p)),val(i){cout<<"HasPtr constructor called!"<<"use= "<<ptr->use<<endl;}
HasPtr(const HasPtr& rhs):ptr(rhs.ptr),val(rhs.val){
++ptr->use;
cout<<"HasPtr copy constructor called!"<<"use= "<<ptr->use<<endl;
}
HasPtr& operator=(const HasPtr& rhs){//自定义
++rhs.ptr->use;
if(--ptr->use==0)
delete ptr;
ptr=rhs.ptr;
val=rhs.val;
return *this;
}
~HasPtr(){
cout<<"HasPtr distructor called"<<"use= "<<ptr->use<<endl;
if(--ptr->use==0)
delete ptr;
}
int *getPtr()const{
return ptr->ip;
}
int getInt()const{
return val;
}
};
int main()
{
HasPtr hp(new int(4),10);
HasPtr hq(new int(5),20);
hq=hp;
return 0;
}
这里面HasPtr就是一个智能指针的实现了