按照我的理解,智能指针简单的说就是一个用于管理成员指针的一个类。一般情况下,这个类都会重载箭头操作符(->)和解引用操作符(*)。在智能指针的类中会使用一个称为使用计数的技巧,也就是如果增加了一个对该类的成员的指针的拷贝,使用计数就增加一;相反,如果减少一个拷贝,使用计数就减少一。当使用计数为0的时候,就释放成员指针所指向的内存。
在C++(www.cppentry.com) Primer中有一个简单的例子:
1
//辅助管理类
2
class 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
//智能指针
15
class HasPtr
16
{
17
U_Ptr *ptr;
18
public:
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
};