多态类的 vptr(指向 vtable)何时初始化?

2024-01-01

这不是关于“VTABLE 何时创建?” https://stackoverflow.com/questions/3849498/when-is-vtable-in-c-created。相反,VPTR 应何时初始化?是在构造函数的开头/结尾还是在构造函数之前/之后?

A::A () : i(0), j(0)  -->> here ?
{
  -->> here ?
  //...
  -->> here ?
}

虚拟调用机制(通常是 v 表,但不是必须的)是在构造函数初始化器,在构造基础子对象之后和构造成员之前。部分[class.base.init]法令:

可以为正在构造的对象调用成员函数(包括虚拟成员函数,10.3)。类似地,正在构造的对象可以是typeid运算符(5.2.8)或dynamic_cast(5.2.7)。但是,如果这些操作是在构造函数初始化器(或者在直接或间接调用的函数中构造函数初始化器) 在所有之前内存初始化器对于已经完成的基类,操作的结果是未定义的。

实际上,在构造基子对象的过程中,虚函数机制是存在的,但它是为基类设置的。部分 [class.cdtor] says:

成员函数,包括虚函数(10.3),可以在构造或销毁期间调用(12.6.2)。当从构造函数或析构函数直接或间接调用虚拟函数时,包括在类的非静态数据成员的构造或销毁期间,并且调用所适用的对象是该对象(称为x)在构造或销毁时,调用的函数是最终的重写者 在构造函数或析构函数的类中,而不是在更派生的类中重写它。如果虚函数调用使用显式类成员访问(5.2.5)并且对象表达式引用了完整的对象x或该对象的基类子对象之一,但不是x或其基类子对象之一,行为未定义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多态类的 vptr(指向 vtable)何时初始化? 的相关文章

  • “字符串”是什么意思?信息'

    我刚刚在查看定义时发现了这个PlatformNotSupportedException class 什么是string message意思是 据我所知是 是缩写Nullable lt gt but Nullable lt gt 只能应用于结
  • 如何将不记名令牌发送到 ASP NET MVC 5 中的视图?

    我有一个 NET MVC and WEB API项目 我想打电话给WEB API controllers来自 javascript 但我没有找到将令牌发送到我的视图的方法 我想添加bearer token in Viewbag变量 使用以下
  • 在 C# 中轻松创建支持索引的属性

    在 C 中我发现索引属性 http msdn microsoft com en us library aa288464 VS 71 aspx非常有用 例如 var myObj new MyClass myObj 42 hello Conso
  • 可变数量的(常量)引用参数

    我试图从我的高级代码 使用 C 11 中消除原始指针 并且我找到了引用 尤其是const 在许多情况下 当没有所有权转移时 是一个很好的替代品 但如果有的话该怎么办variable我想通过 常量 引用传递的参数数量 你不能创建一个std v
  • C# 并行与并行线程代码性能

    我一直在测试 System Threading Parallel 与线程的性能 我很惊讶地发现并行比线程花费更长的时间来完成任务 我确信这是由于我对并行的了解有限 我刚刚开始阅读 我想我会分享一些片段 如果有人可以向我指出并行代码比线程代码
  • 当我使用 SetWindowsHookEx WH_KEYBOARD_LL 交换按键时,为什么我的程序会陷入过多键盘输入事件的循环?

    I am trying to write a program for Windows system that swaps the A and B keys i e when I press the A key B gets typed an
  • 在目标 VS 安装时,VSIX 扩展内部使用的 WPF-Log4Net 未输出日志

    当 Log4net 在 VSIX 扩展中使用并安装在另一个目标 VS 上时 它不会记录日志 我有一个 WPF 解决方案 我下载了 log4net dll 添加了 log4net config 并将 复制到输出目录 值设置为 始终复制 log
  • 修剪 UIImage 边框

    这是我想要修剪的图像的示例 我想去掉图像周围的边框 在本例中是顶部和底部的黑条 我在Github上找到了一个库 CKImageAdditions https github com cmkilger CKImageAdditions 但是它似
  • 以编程方式运行 T4 文本模板

    有没有一种方法可以通过代码以编程方式运行 T4 文本模板 我正在制作一种自定义域特定语言 我希望相关的文本模板在用户每次保存时运行 目前 这就是我在 DSL 模型中所做的事情 protected override void OnDocume
  • 什么时候需要使用 new 来初始化 F# 类型?

    给定一个类 例如 type MyClass member this Greet x printfn Hello s x 使用初始化实例是否合适 let x new MyClass 或没有new 另外 什么时候使用new构造函数比 a 更有用
  • Identity Server 4:添加访问令牌的声明

    我正在使用 Identity Server 4 和隐式流 并且想要向访问令牌添加一些声明 新的声明或属性是 tenantId 和 langId 我已将 langId 添加为我的范围之一 如下所示 然后通过身份服务器请求 但我也获得了tena
  • 三种 System.Drawing 方法表现出缓慢的绘制或闪烁:解决方案?或其他选择?

    我正在通过 System Drawing 进行一些绘图 但遇到了一些问题 我将数据保存在队列中 并将该数据绘制 绘制 到三个图片框中 此方法填充图片框 然后滚动图形 所以不要在以前的绘图上绘制 并且逐渐看起来更混乱 我找到了两种绘制图表的解
  • 将授权标头添加到 Web 参考

    我正在尝试向客户端的网络服务发出请求 我不知道客户端的底层平台 我使用 添加 Web 引用 在 Visual Studio 2010 中使用了客户端的 WSDL 并生成了我的代理类 称为 ContactService 我现在需要将如下所示的
  • 执行存储过程时 ExecuteNonQuery() 返回 -1

    我正在尝试在 Visual Studio 中执行存储过程 下面给出 CREATE PROCEDURE dbo addStudent stuName varchar 50 address varchar 100 tel varchar 15
  • C++:LPWSTR 在 cout 中打印为地址

    我有一个类型变量LPTSTR 我打印到std cout with lt lt 在 ANSI 系统中 不知道它是在哪里确定的 它工作得很好 它打印了字符串 现在 在 Unicode 系统中 我得到的是十六进制地址而不是字符串 那么 为什么LP
  • 从视图模型调用方法的命令

    好吧 我倾向于避免使用命令 因为它们总是让我感到困惑 但我正在进行一个新项目 并且正在尝试正确构建它 并且在我看来没有任何代码隐藏 基本上我现在想做的就是连接一个按钮来触发一个命令 在我的视图模型上执行一些操作 但不知何故 如此简单的事情仍
  • 如何在 Visual Studio 2010 Express 中引用 system.drawing?

    我对此有点陌生 我的印象是要绘制我创建的矩形 我需要使用 system drawing graphics 问题是 我收到错误 命名空间 System 中不存在类型或命名空间名称 drawing 您是否缺少程序集引用 当我右键单击解决方案资源
  • 使用非字符串作为字符串(而不是自动使用 ToString)时如何显示错误?

    建议的重复确实是一个类似的问题 然而 答案只涵盖一种选择 禁用 ToString 本身 还有其他可能的解决方案 例如让 Visual Studio 警告我 或者不调用 ToString 仔细阅读那里的答案 他认为is调用 只是解释说没有办法
  • 返回 ICollection 而不是 List 的真正优势是什么? [复制]

    这个问题在这里已经有答案了 我读过几篇博客文章 提到对于公共 API 我们应该始终返回 ICollection 或 IEnumerable 而不是 List 返回 ICollection 而不是 List 的真正优势是什么 Thanks 复
  • DataGridView 捕获用户行选择

    我在处理选择时遇到问题DataGridView 我的网格视图包含一个金额列 表单上有一个文本框 应显示所选网格视图行的总数 因此 我需要在用户选择 取消选择 gridview 行时捕获事件并相应地计算 添加 减去 金额 我找到了两种方法 使

随机推荐

  • 如何根据列的变化值对记录进行分组/排名?

    我有下表按 ID 年份 DESC 排序 Id Year Valid 1 2011 1 1 2010 1 1 2009 0 1 2002 1 4 2013 1 4 2012 1 4 2011 1 etc 我想要的是一个额外的排名字段 例如 I
  • 将 google play 服务添加到项目后无法运行项目

    我正在制作一个需要谷歌地图的Android应用程序 我在 Eclipse 中创建了一个新项目并在 Android 手机上编译它 它工作了 但是当我将 google play services lib 导入到我的工作区并在我的项目中添加对它的
  • 如何添加监听多个按钮的动作监听器

    我试图找出我对动作监听器做错了什么 我正在遵循多个教程 但当我尝试使用操作侦听器时 netbeans 和 eclipse 给了我错误 下面是一个简单的程序 我试图让一个按钮在其中工作 我究竟做错了什么 import java awt eve
  • 使用 Jinja 循环项目,每 5 个项目后添加 div

    Problem 我有 100 个高尔夫球场的列表 我希望插入一个 div 其中每五个球场后包含一个广告图像 我该怎么做呢 更新 1 content html 修订后的最新版本 我已经更新了我的原始代码片段 因为 leovp 的 建议在下面编
  • 如何仅倾斜/倾斜 div 的底部

    我一直在尝试在 div 的底部添加倾斜 倾斜 我取得了一些成功 正如您在下面的 JSFiddle 中看到的那样 我成功地应用了倾斜 但这并不完全是我想要的 https jsfiddle net hcow6kjr https jsfiddle
  • OAuthException:(#12) v2.0 及更高版本已弃用事件管理 API

    当我通过离线发布将事件发布到我的墙上时 我陷入了此错误OAuthException 12 events management API is deprecated for versions v2 0 and higher 您无法再使用 Gra
  • Scala 字节的十六进制文字

    包含 A F 数字的十六进制文字默认转换为 int 当我试图用以下方法声明一个 Int 时0x它正在正确创建 val a Int 0x34 val b Int 0xFF 但是当我尝试声明一个字节时0x第二行未编译 val a Byte 0x
  • 为什么浏览器在这里低效地发出 2 个请求?

    我注意到 ajax 和图像加载有些奇怪 假设页面上有一张图像 并且 ajax 请求相同的图像 人们会猜测 ajax 请求会命中浏览器缓存 或者它至少应该只发出一个请求 生成的图像将发送到页面和想要的脚本读取 处理图像 令人惊讶的是 我发现即
  • Hibernate Criteria API - 访问连接属性

    我有一个非常复杂的标准 我用它来检索 排序和分页服务器端数据 我摘录了以下内容 create criteria over a bunch of tables Criteria testCriteria getSession createCr
  • Google 应用引擎禁用请求日志记录

    我正在寻找一种方法来过滤掉请求日志垃圾邮件 以便我可以更轻松地看到警告或错误 这似乎在本地有效 loggers django handlers console level WARNING 但GAE失败 根据这个问题 https stacko
  • 错误:将“char*”分配给“char [20]”时类型不兼容

    我是这个 C 环境的新手 并且我的构造函数遇到了困难 这是我的代码 class Student char name 20 long number public Student char nm 20 long val name nm numb
  • 无法在 Airflow UI 中编辑 Spark_default

    我正在尝试使用以下存储库运行 Airflow 和 Spark 的容器化应用程序 https github com cordon thiago airflow spark https github com cordon thiago airf
  • sys.exit 对于多线程到底有什么作用?

    我对 python 中的 sys exit 感到非常困惑 在python 文档 https docs python org 2 library sys html 它说 退出Python 这是否意味着当sys exit 在python程序中调
  • 什么是浏览器二进制管理器如何将其用于 Selenium

    我最近知道使用 WebDriver Binaries 管理器是自动化项目中的一个很好的实践 但不确定这是什么以及如何使用 也做了一些谷歌搜索 并得到了很多关于如何管理二进制文件的帖子 但没有说明为什么使用 因此 如果有人能够指导它及其好处
  • 将一个文件的内容以换行符分隔附加到另一个文件

    我想 我正在尝试复制cat以与平台无关的方式使用 Linux shell 的功能 这样我就可以获取两个文本文件并按以下方式合并它们的内容 file 1 包含 42 bottles of beer on the wall file 2 包含
  • 使用RavenDB作为持久缓存

    我目前有一个 Web 应用程序 它在内存中缓存大量数据 数十万个条目 以供快速查找 然后在 SQL Server 中作为持久缓存 基本上 该信息由地址的地理编码组成 其中地理编码是通过远程 Web 服务检索的 如果需要连续调用而不是缓存 则
  • 如何使用libpcap中的“pcap_lookupdev()”?

    代码找不到任何设备 我想知道 pcap lookupdev 是做什么的 谢谢 include
  • fork() 之后地址、值和指针会发生什么

    我正在研究一个问题 我要在某个问题之前和之后检查价值观并解决问题fork 在 C 中调用 我的方法是显示变量值和地址 假设在fork 令我惊讶的是 上述变量的地址保持不变 我的问题是为什么它们是相同的 如果我更改子项中的变量会发生什么 父母
  • 在 Chrome 上更改具有 src="about:blank" 的 iframe 内容的 CSS

    我正在尝试这段代码来应用新设计the 谷歌任务 page https mail google com tasks canvas with 扩展 Tampermonkey https tampermonkey net 当我尝试时html di
  • 多态类的 vptr(指向 vtable)何时初始化?

    这不是关于 VTABLE 何时创建 https stackoverflow com questions 3849498 when is vtable in c created 相反 VPTR 应何时初始化 是在构造函数的开头 结尾还是在构造