随笔 - 1  文章 - 1  trackbacks - 0
<2007年11月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

常用链接

留言簿(1)

随笔档案

搜索

  •  

最新随笔

最新评论

智能指针的学习

   按照我的理解,智能指针简单的说就是一个用于管理成员指针的一个类。一般情况下,这个类都会重载箭头操作符(->)和解引用操作符(*)。在智能指针的类中会使用一个称为使用计数的技巧,也就是如果增加了一个对该类的成员的指针的拷贝,使用计数就增加一;相反,如果减少一个拷贝,使用计数就减少一。当使用计数为0的时候,就释放成员指针所指向的内存。
   在C++ Primer中有一个简单的例子:
 1//辅助管理类
 2class U_Ptr
 3{
 4    friend class HasPtr;
 5    int *p;
 6    int count;
 7    U_Ptr(int *pn):p(pn),count(1){};
 8    ~U_Ptr()
 9    {    
10        delete p;
11    }

12}
;
13
14//智能指针
15class HasPtr
16{
17    U_Ptr *ptr;
18public:
19    HasPtr(int *p):ptr(new U_Ptr(p)){}
20    ~HasPtr()
21    {
22        if(--ptr->count == 0
23            delete ptr;
24    }

25    HasPtr(const HasPtr &otherHasPtr):ptr(otherHasPtr.ptr)
26    {
27        ++ptr->count;        
28    }

29    HasPtr &operator=(const HasPtr &otherHasPtr)
30    {
31        if(--ptr->count == 0)
32            delete ptr;
33        ptr = otherHasPtr.ptr;
34        ++ptr->count;
35        return *this;
36    }

37    //对于整型指针重载->没有意义
38    //int *operator->()
39    //{
40    //    return ptr->p;
41    //}
42    int &operator*()
43    {
44        return *(ptr->p);
45    }

46}
;
posted on 2007-11-30 12:22 一半君子 阅读(829) 评论(1)  编辑 收藏 引用

FeedBack:
# re: 智能指针的学习[未登录] 2008-06-07 17:48 chenq
用vc编译器每次到delete语句都会报错  回复  更多评论
  


标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
.NET频道  博客园社区  闪存
网站导航: