更多课程 选择中心

C/C++培训
达内IT学院

400-111-8989

C++培训笔记--怎么实现智能指针

  • 发布:C++培训
  • 来源:网络
  • 时间:2018-04-26 18:03

C、C++没有自动内存回收机制,程序员需要手动释放,如果忘记则会导致内存泄露,另外普通指针存在悬垂指针的问题。

何为悬垂指针?

当有多个指针指向同一个对象时,如果某个指针delete了该对象,对这个指针来说它是明确了它所指的对象被释放了,所以它不会再对此对象进行操作,但是对于剩下的其他指针来说呢?它们还傻傻地指向已经被删除的对象,并随时准备对它进行操作,于是悬垂指针就形成了。

代码很简单,我们可以看出错误产生来自ptr1并不知道还有其他指针共享着它所指向的对象,如果想办法让ptr1知道,除了自己外还有其他两个指针指向该对象,那么它不删除对象,问题就得到解决。

引用计数出现啦~~~

智能指针的一种通用实现技术是使用引用计数器,智能指针类将一个计数器与类所指的对象相关联,引用计数器跟踪该类有多少个对象共享同一指针。

具体做法:

1).每次创建类的新对象时,初始化指针并将引用计数置为1;

2).当对象作为另一个对象的副本时,复制构造函数复制副本指针,并增加与指针引用相应的引用计数(加1);

3).使用赋值操作符对一个对象进行赋值时,处理复杂一点:先使左操作数的指针的引用计数减1(因为指针已经指向别的地方),如果减1后引用计数为0,则释放指针所指对象内存。然后增加右操作数所指对象的引用计数(因为此时左操作数指向对象即右操作数指向对象)。

4).析构函数:调用析构函数时,析构函数先使引用计数减1,如果减至0则delete对象。

设计智能指针

1.辅助类

2.为了直观的表示,我们实例化一个基础对象--点

3.为基础对象类实现智能指针类: 按以上介绍引用计数的做法,以引用计数为关键点

4.主函数

输出结果:

还有2 个指针指向基础对象

还有1 个指针指向基础对象

0

上述程序实现的智能指针不能像正常指针那样有* -> 等操作符,而且只是适应Point这个类对象,下面我们完成一个完整的智能指针,重载* -> 等操作符,用类模板来使我们的智能指针适用于更多的基础对象类。

 

输出结果为:

2

20

还有2 个指针指向基础对象

还有1 个指针指向基础对象

免责声明:内容和图片源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:C++培训笔记--内存泄漏检测
下一篇:C++中的单例模式

C++培训笔记--怎么实现智能指针

  • 扫码领取资料

    回复关键字:视频资料

    免费领取 达内课程视频学习资料

  • 搜索抖音号

    搜索抖音号:1821685962

    免费领取达内课程视频学习资料

Copyright © 2021 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省