智能指针

在实际的c++项目中,经常会用new或malloc等在堆区申请动态资源,那么很可能会忘记释放资源。这个问题在程序量小的时候一一般不会发生,但是当程序量很大时,确是很有可能发生。智能指针就是解决这一问题,让指针可以像对象一样自动释放。

解决思想:把所有指针抽象为一个模板类,每一个指针是一个具体的对象。在这个类中,有一个成员类用来控制计数。 1 class counter{

 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 };

 

posted @ 2016-06-12 09:43  醉剑客  阅读(184)  评论(0编辑  收藏  举报