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