设为首页 加入收藏

TOP

C++智能指针的学习体会
2011-12-24 22:54:56 】 浏览:2474
Tags:智能 指针 学习 体会

按照我的理解,智能指针简单的说就是一个用于管理成员指针的一个类。一般情况下,这个类都会重载箭头操作符(->)和解引用操作符(*)。在智能指针的类中会使用一个称为使用计数的技巧,也就是如果增加了一个对该类的成员的指针的拷贝,使用计数就增加一;相反,如果减少一个拷贝,使用计数就减少一。当使用计数为0的时候,就释放成员指针所指向的内存。

 在C++(www.cppentry.com) 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}
;
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇谈谈 C++ 的引用 下一篇浅谈C++的智能指针

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目