在实际的c++项目中,常常会用new或malloc等在堆区申请动态资源,那么极可能会忘记释放资源。这个问题在程序量小的时候一通常不会发生,可是当程序量很大时,确是颇有可能发生。智能指针就是解决这一问题,让指针能够像对象同样自动释放。c++
解决思想:把全部指针抽象为一个模板类,每个指针是一个具体的对象。在这个类中,有一个成员类用来控制计数。 1 class counter{spa
2 private: 3 int cnt; 4 T *ptr; 5 public: 6 friend class Smart_pointer; 7 counter(){ 8 cnt = 0; 9 ptr=NULL; 10 } 11 12 counter(counter& sp){ 13 cnt = 1; 14 counter = sp; 15 } 16 17 ~counter(){ 18 delete ptr; 19 } 20 21 }; 22 23 class Smart_pointer{ 24 private: 25 counter* pr; 26 27 public: 28 Smart_pointer(){ 29 30 pr = new counter(); 31 32 } 33 Smart_pointer(Smart_pointer &sp) 34 { 35 pr = new counter(sp); 36 } 37 Smart_pointer& operator =(Smart_pointer& sp) 38 { 39 ++sp->cnt;
--pr->cnt
if(pr->cnt==0)
delete pr;
pr = sp; 41 }
T operator *()
{
return *pr->ptr;
} 42 ~Smart_pointer()
{
--pr.cnt;
if(pr->cnt==0)
delete pr;
} 43 };