C++中的句柄类

C++中的句柄类初次在 C Primer 看到句柄 不是特别理解 在搜索相关资料后 终于有了点头绪 首先明白句柄要解决什么问题 参考文章 C 沉思录 阅读笔记 代理类场景 我们要把继承类绑定到基类的实例对象中该场景有两个问题需要解决 内存分配和未知对象的绑定有如下解决方案直接复制继承类对象到基类对象中问题 很多时候基类是抽象类 无法实例化 不知道继承类

初次在《C++ Primer》看到句柄,不是特别理解。在搜索相关资料后,终于有了点头绪。

首先明白句柄要解决什么问题。参考文章《C++ 沉思录》阅读笔记——代理类

场景:

我们要把继承类绑定到基类的实例对象中

该场景有两个问题需要解决:内存分配和未知对象的绑定

  1. 直接复制继承类对象到基类对象中
    问题:很多时候基类是抽象类,无法实例化;不知道继承类是什么类型,其会被当成基类类型,会丢失自身的属性;
  2. 用基类指针存储继承类对象的地址
    问题:若继承类对象被释放,则基类指针就成了悬垂指针,指向什么就不知道了
  3. 使用一个成员函数copy,让继承类告诉别人他自身是什么类;利用该成员函数复制对象到基类对象中
    这是一个比较好的解决方案,但仍美中不足:
    1. 复制对象,需要内存开销
    2. 从设计类的时候就要考虑为类定义成员函数copy


  4. 考虑引用。但引用会造成一系列更严重的内存管理和安全问题。
这个时候句柄就派上用场了。参考文章:  《C++ 沉思录》阅读笔记——句柄类
句柄
  1. 私有成员包含类指针,使用者不能直接操作类指针,但可以通过句柄类提供的函数使用类的接口函数
  2. 私有成员包含int指针类型的引用计数值,避免多次复制副本产生大量内存开销
    计数值为0时,删除副本;
    计数值首次赋值时,复制原对象,因此即使原对象被删除,也不会出现垂悬指针的问题。

总结:

句柄类避免了使用者接触指针,因此使用者不用考虑其内存管理;句柄类使用引用计数的方式,来避免每次复制都需要拷贝对象。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232184.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Tomcat学习—Tomcat的简介和目录以及配置文件介绍(Windows环境)

    初学Tomcat,记录整理Tomcat的简介和配置文件信息

    2022年2月24日
    89
  • 电赛练习之旋转倒立摆

    电赛练习之旋转倒立摆2019年电赛已经结束,虽然结果不能令人满意,但闲下来,还是总结一下电赛学到的东西与失败的地方。这一次先来谈一下一阶旋转倒立摆。一、题目分析:拿到一道题目,其实最应该做的事情是分析题目,因为我们往往可以发现某些发挥题是在基础题的基础上进行的,但是,可能某些发挥题需要在基础题的基础上修改结构,我们也可以发现,题目中的某些问题具有相似性,当我们合并同类项的时候,可以把题目的要求变得简单。一下,我粘…

    2022年8月18日
    5
  • Jmeter 安装教程

    Jmeter 安装教程Jmeter安装教程

    2022年6月1日
    31
  • 贪吃蛇(C语言实现)

    贪吃蛇(C语言实现)文章目录游戏说明游戏效果展示游戏代码游戏代码详解游戏框架构建隐藏光标光标跳转初始化界面初始化蛇颜色设置随机生成食物打印蛇与覆盖蛇移动蛇执行按键判断得分与结束游戏主体逻辑函数从文件读取最高分更新最高分到文件主函数游戏说明游戏效果展示游戏代码游戏代码详解游戏框架构建隐藏光标光标跳转初始化界面初始化蛇颜色设置随机生成食物打印蛇与覆盖蛇移动蛇执行按键判断得分与结束游戏主体逻辑函数从文件读取最高分更新最高分到文件主函数…

    2022年5月9日
    40
  • idea激活码2022破解方法

    idea激活码2022破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    371
  • 设计模式——六大原则[通俗易懂]

    设计模式——六大原则[通俗易懂]设计模式——六大原则

    2022年4月24日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号