使用虚拟破坏顺序

2023-12-21

有人可以帮助我使用虚拟函数时的破坏顺序吗?是从基类开始,然后是派生类吗?


由于我没有看到虚函数如何改变任何对象的销毁顺序,我假设您指的是虚函数中基类和数据成员的销毁顺序遗产设想。

子对象是

  1. 基类被建造从最基础到最衍生;
  2. 多个基类均建于声明为基类的顺序;
  3. 虚拟基类被建造在所有其他人之前,彼此之间遵守上述两条规则;
  4. 数据成员被建造在执行封闭对象的构造函数主体之前,按照声明的顺序。

毁灭正好相反建造,所以你只需要记住上面的内容即可。

然而,上述四个规则是按这个顺序排列的,因为这是有道理的,如果你理解为什么这个顺序有意义,你甚至不必记住这四个规则,而是可以从你的理解中推断出它们(就像我刚才所做的那样)。那么让我们检查一下这个顺序:

  • 您可能想要使用基类从派生类的构造函数提供的任何服务。当然,在实际构造之前您不能使用(基)类对象。因此,当构造派生类时,需要已经构造基类。 (顺便说一句,这也解释了为什么虚函数分派不能在构造函数中完全工作:当构造子对象时,只有基类的子对象已经构造完毕;派生类的子对象还没有构造构造函数。因此,不得将对虚函数的调用分派给派生类。与往常一样,析构函数是相同的,只是向后。)
  • 由于多个基类是平等的兄弟姐妹,因此必须任意选择某些顺序。最终,声明的顺序是最简单的使用顺序。数据成员也是平等的兄弟,遵循相同的(或多或少任意的)声明顺序规则。
  • 虚拟基类是奇怪的野兽。因为虚拟基类总是只有一个子对象,所以有一条特殊的规则,它总是需要首先从最派生类的构造函数构造。 (这就是为什么虚拟基类作为没有数据且只有默认构造函数的抽象基类效果最好。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用虚拟破坏顺序 的相关文章

  • 没有强命名的代码签名是否会让您的应用程序容易被滥用?

    尝试了解authenticode代码签名和强命名 我是否正确地认为 如果我对引用一些 dll 非强命名 的 exe 进行代码签名 恶意用户就可以替换我的 DLL 并以看似由我签名但正在运行的方式分发应用程序他们的代码 假设这是真的 那么您似
  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co

随机推荐

  • 未找到 Grails 独立插件

    我正在尝试使用grails 独立插件 http grails org plugin standalone有了一个新的 grails 项目 但我无法让它工作 我已将其添加为我的插件依赖项BuildConfig groovy file plug
  • 如何在需要时仅提交隐藏/显示字段数据之一 - Laravel

    一个表单包含多个字段 其中一个字段是 是 否 下拉列表 选择 是 后 会出现另一个下拉菜单 当没有选择时 会出现一个文本输入字段 根据是 否下拉列表 字段的数据之一应提交到数据库 但是 这两个字段的数据都会发送到数据库 但数据库需要一个字符
  • Nest SuggestCompletion 用法,抛出“不是完成建议字段”异常

    我是elasticsearch的完全初学者 我一直在尝试使用elasticsearch的完成建议器 使用Nest对属性进行自动完成 这是我的映射 如上所述here https github com Mpdreamz NEST blob ma
  • Numpy sum() 函数 + 推导式:int32 还是 in64?

    为什么当输入是 int 列表时 numpy sum 和 numpy prod 函数返回 int32 如果输入是同一列表的生成器 则返回 int64 在列表上操作时强制他们使用 int64 的最佳方法是什么 E g sum x for x i
  • 将 Adob​​eMobileLibrary(适用于 iOS)与 cocoapods 一起使用?

    我们将使用适用于 iOS 的 Omniture Tracking 它是 Adob eMobileLibrary 的一部分 AdobeAdobeMobileLibrary 无法通过 cocoapods repo 仅旧版本的 Omniture
  • python对象的查询语言[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个库 可以让我在 python 对象数据库 上运行类似 SQL 的查询 对于对象数据库 我
  • *** 检测到 glibc *** free():下一个大小无效(正常):0x0a03c978 *** [重复]

    这个问题在这里已经有答案了 我正在编写一个套接字程序来下载图像 问题是 当我在 gif 这样的小图片上测试我的代码时 它工作得很好 但是当我用 JPG 图片 大于 GIF 运行它时 我收到错误消息 glibc detected home u
  • 将 API 密钥放在标头或 URL 中

    我正在为我公司的数据设计一个公共 API 我们希望应用程序开发人员注册 API 密钥 以便我们可以监控使用情况和过度使用情况 由于 API 是 REST 我最初的想法是将此密钥放在自定义标头中 我看到谷歌 亚马逊和雅虎就是这样做的 另一方面
  • Fortran 技术查询[重复]

    这个问题在这里已经有答案了 我在 Fortran 中有以下函数签名 我是 Fortran 语言的新手 是什么意思0 在下面的函数中 ANTY IAN NA 0 0 符号0 带小数点表示浮点数 而0不带小数点表示整数 对于 FORTRAN 的
  • 决定倒塌这棵树的截止的算法?

    我有一个Newick http en wikipedia org wiki Newick format通过比较 4 9 bp 长 DNA 序列的假定 DNA 调控基序的位置权重矩阵 PWM 或 PSSM 的相似性 欧几里德距离 而构建的树
  • 如何在java 8中使用收集器和流自动递增哈希图的键

    我是 Java 8 的新手 Streams and Collectors类 我正在读取一个文件 其内容需要保存在LinkedHashMap
  • BigInt 相乘

    class BigInt private string data bool isNegative BigInt multiplication BigInt left BigInt right BigInt sum BigInt result
  • 如何通过 REST API 使用 IBM Watson 的 QA 服务

    我刚刚开始学习IBM Watson 服务 我需要使用 REST API 在 java 中使用 bluemix 的问答 API 但我找不到类似的服务问题和答案 请有人告诉我名称是否已更改或者我在哪里可以找到该服务的文档 我已经尝试过 SO 中
  • Ratchet PHP WAMP - React / ZeroMQ - 特定用户广播

    Note 这是not与这个问题 https stackoverflow com questions 17583903 how to get the connection object of a specific user它利用Message
  • npm - 自动更新本地库依赖项

    我已经使用了 npm 的本地包依赖功能 如下所示 npm install save file path to module 我使用更新我的库模块npm run build创建 dist 文件 然后我跑npm update在使用该库的项目中
  • Spring Boot 中 URL 必须以“jdbc”开头

    我的应用程序正在运行 但是当我遇到应用程序错误时 我尝试了好几次同样的事情发生了 我检查了数据库连接 一切正常 这些是我的日志 例外 Caused by java lang IllegalArgumentException URL must
  • 重构类以摆脱 switch case

    假设我有一个这样的类来计算使用不同交通方式旅行不同距离的成本 public class TransportationCostCalculator public double DistanceToDestination get set pub
  • VBA Excel 基于匹配列单元格查找和组合行

    我试图找出一种方法来根据 vba excel 中两个特定列中的值组合行 例如 假设我有以下表格 Column A Column J Column Z 1 A 1 A 2 B 2 B 我需要将其转换为 Column A Column J Co
  • Google 地图 v3 可拖动标记

    我是谷歌地图的新手 我正在努力学习它 marker new google maps Marker map map draggable true animation google maps Animation DROP position re
  • 使用虚拟破坏顺序

    有人可以帮助我使用虚拟函数时的破坏顺序吗 是从基类开始 然后是派生类吗 由于我没有看到虚函数如何改变任何对象的销毁顺序 我假设您指的是虚函数中基类和数据成员的销毁顺序遗产设想 子对象是建 基类被建造从最基础到最衍生 多个基类均建于声明为基类