永发信息网

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

答案:2  悬赏:30  手机版
解决时间 2021-02-04 18:20
c++primer里有关智能指针的一个疑问。
最佳答案
这书我看过了 C++沉思录 C++Primer 上面都提到智能指针 是这样的:U_Ptr这个类算是代理类吧(有时叫它句柄类 其实我也不知道为什么) 因为它有计数 计数的是有多少个对象是U_Ptr类代理的类(原始的) 每创建或者复制这种类型的对象 实际上在U_Ptr中的计数加1(有多少个原始的类类型的对象指向U_Ptr) 只有一个U_Ptr指向原始的类(或是别的) 注意:当U_Ptr中的计数为0时就是没有对象对向他 所以执行delete p 而代理类本身没有动态申请堆空间 释放的只是原始类(U_Ptr指向的)申请的空间 我觉得你没有弄清楚指针P和U_Ptr之间的区别

会的!P成为野指针 如果在访问P将出错 因为P指向的内存空间以不在 但P还是指向原来的地方啊…追问能不能说清楚点,我理解力差 呵呵追答噢 正好我的书柜有这书,是这样的,delete p 是释放p指针申请的空间,而U_Ptr的ip指针它并没有申请空间,不需担心它成为“野指针”
delete p
p=NULL
U_Ptr的作用只负责计数,计数的是有多少指向int类型对象(你上面的int型) 当只有一个对象指向U_Ptr时,它的计数为1,执行--ptr->use==0时,就没有对象指向它了,要释放P,也就是把这些工作交给U_Ptr
我也说的不清楚 但是我知道是什么回事 呵呵 你再仔细的看看书吧追问还是没理解。那delete p之后,U_ptr对象还能访问到p指针所指向的那块内存吗?要不Q聊吧追答不能访问到那块内存 既然释放了 就没有内容了 只是P指向的地址存在 如果这样:P=NULL 那么地址就没有 如果没有那句话 P是野指针 你的扣扣多少
全部回答
"delete p"的操作产不会引起"U_Ptr"的"ip"成为悬垂指针。
实际上Hasptr ptr(p,10)后,p所指的内存已经由ip来接收了,在这里p只量个中间临时的变量,
用来初始化HasPtr后就没用了否则程序,正应该delete p才对,完成后会造成内存泄漏。
只是ip接收p动态申请的内存也有个条件:
就是在HasPtr类的构造函数应该改为:
HasPtr(int *p,int i):ptr(new U_Ptr(new int(*p))),val(i) {}"
而不是这样:"HasPtr(int *p,int i):ptr(new U_Ptr(*p)),val(i) {}"(这是网上下来C++Primer代码)
后者在编译时会出现故障。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
曹操的儿子曹丕是怎么死的?
显卡:蓝宝石R9370x超白金 迪兰370x酷能4gplu
金立手机'长按8秒电源键有什么作用
本田艾力绅胎压消除
福成药房地址有知道的么?有点事想过去
饭店员工的招聘一般要经过()四个阶段。A.准备
黄历怎么看
库洛牌和塔罗牌是一个意思吗?
满记甜品恒隆广场店我想知道这个在什么地方
枣花蜂蜜和槐花蜜柚什么区别
红月各地图经验哪个高,有很多地图,从宇宙
玛仕体育篮球培训中心(水丰路店)地址在哪,我
【毛毛雨】为什么现在很久都没有见到过下毛毛
古代废妃位时说的话
嗅觉是什么意思
推荐资讯
linux 站点创建成功,怎么上传源代码
各位亲们谁用过曲美家具?说下曲美的牌子好吗
水丽芳经络养生会所地址在什么地方,我要处理
怎么删除三星平板上软件的安装信息
Warning: mysqli::mysqli() [mysqli.mysqli]:
()-57-9=13等于多少
贝亲玻璃奶瓶可以用开水煮吗?
煮豆燃萁的主人公是谁
超级电容是什么构造,材质是什么,详细点
心欣缘婚庆礼仪地址好找么,我有些事要过去
凌海市金城义务教育学校地址在哪,我要去那里
下列哪项是生产者与消费者之间的关系DA. 青蛙
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?