智能指针

在实际的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 };
相关文章
相关标签/搜索