我的家园
C++博客
首页
新随笔
联系
聚合
管理
随笔 - 1 文章 - 1 trackbacks - 0
<
2007年11月
>
日
一
二
三
四
五
六
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔档案
2007年11月 (1)
搜索
最新随笔
1. 智能指针的学习
最新评论
1. re: 智能指针的学习[未登录]
用vc编译器每次到delete语句都会报错
--chenq
智能指针的学习
智能指针的学习
按照我的理解,智能指针简单的说就是一个用于管理成员指针的一个类。一般情况下,这个类都会重载箭头操作符(->)和解引用操作符(*)。在智能指针的类中会使用一个称为使用计数的技巧,也就是如果增加了一个对该类的成员的指针的拷贝,使用计数就增加一;相反,如果减少一个拷贝,使用计数就减少一。当使用计数为0的时候,就释放成员指针所指向的内存。
在C++ 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
}
;
posted on 2007-11-30 12:22
一半君子
阅读(829)
评论(1)
编辑
收藏
引用
FeedBack:
#
re: 智能指针的学习[未登录]
2008-06-07 17:48
chenq
用vc编译器每次到delete语句都会报错
回复
更多评论
刷新评论列表
标题
姓名
主页
验证码
*
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
.NET频道
博客园社区
闪存
网站导航:
博客园
BlogJava
博客生活
IT博客网
C++博客
PHP博客
博客园社区
管理