c primer里有关智能指针的一个疑问。

[复制链接]
查看11 | 回复4 | 2011-7-7 07:39:09 | 显示全部楼层 |阅读模式
cprimer中文版第四版第422页,有一个图如下:
我想问的是假如这里的执行deletep操作。
那么对象U_Ptr的指针不也成了悬浮指针了吗?
回复

使用道具 举报

千问 | 2011-7-7 07:39:09 | 显示全部楼层
这书我看过了C沉思录CPrimer上面都提到智能指针是这样的:U_Ptr这个类算是代理类吧(有时叫它句柄类其实我也不知道为什么)因为它有计数计数的是有多少个对象是U_Ptr类代理的类(原始的)每创建或者复制这种类型的对象实际上在U_Ptr中的计数加1(有多少个原始的类类型的对象指向U_Ptr)只有一个U_Ptr指向原始的类(或是别的)注意:当U_Ptr中的计数为0时就是没有对象对向他所以执行deletep而代理类本身没有动态申请堆空间释放的只是原始类(U_Ptr指向的)申请的空间我觉得你没有弄清楚指针P和U_Ptr之间的区别


会的!P成为野指针如果在访问P将出错因为P指向的内存空间以不在但P还是指向原来的地方碍









<h4class=\"ask\">追问


能不能说清楚点,我理解力差呵呵
回复

使用道具 举报

千问 | 2011-7-7 07:39:09 | 显示全部楼层
噢正好我的书柜有这书,是这样的,deletep是释放p指针申请的空间,而U_Ptr的ip指针它并没有申请空间,不需担心它成为“野指针”
deletep
p=NULL
U_Ptr的作用只负责计数,计数的是有多少指向int类型对象(你上面的int型)当只有一个对象指向U_Ptr时,它的计数为1,执行--ptr-use==0时,就没有对象指向它了,要释放P,也就是把这些工作交给U_Ptr
我也说的不清楚但是我知道是什么回事呵呵你再仔细的看看书吧
回复

使用道具 举报

千问 | 2011-7-7 07:39:09 | 显示全部楼层
还是没理解。那deletep之后,U_ptr对象还能访问到p指针所指向的那块内存吗?要不Q聊吧
回复

使用道具 举报

千问 | 2011-7-7 07:39:09 | 显示全部楼层
不能访问到那块内存既然释放了就没有内容了只是P指向的地址存在如果这样:P=NULL那么地址就没有如果没有那句话P是野指针你的扣扣多少
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行