当前位置: 首页 > news >正文

构造函数可以是虚函数吗?

不可以

1. 虚函数机制依赖于虚函数表(vtable),而 vtable 在构造函数执行期间才建立

  • 当一个对象被创建时,内存首先被分配,然后构造函数被调用。

  • 在构造函数执行之前,对象还没有完全成型,它的 vptr(指向 vtable 的指针)还没有被设置。

  • 如果构造函数是虚函数,它需要通过 vptr 来查找 vtable 中的函数地址。但此时 vptr 还未初始化,这形成了一个“先有鸡还是先有蛋”的矛盾,会导致未定义行为。

对象的构建过程可以简化为:

  1. 分配内存。

  2. 设置对象的 vptr,使其指向当前类的 vtable。(这一步由编译器在构造函数代码执行前自动插入)

  3. 执行构造函数体内的代码(初始化成员变量等)。

  4. 对象构建完成。

在步骤 2 完成之前,虚函数机制根本无法工作。

2. 语义上的矛盾:你知道你要创建什么

  • 虚函数的目的是为了让你在不知道对象具体类型的情况下,也能调用到正确的函数实现(多态)。

  • 然而,当你使用 new 关键字时,你明确指定了要创建的类型(例如 new Derived)。既然你已经知道了要创建的确切类型,就没有必要使用虚函数机制来决定调用哪个构造函数。

// 你知道你要创建一个 Dog,所以直接调用 Dog 的构造函数
Animal* myPet = new Dog(); // 这里不需要“虚构造函数”来决定调用哪个构造函数
http://www.sczhlp.com/news/53673/

相关文章:

  • 专业网站设计发展前景门户网站建设 增强责任意识
  • 许昌住房和城乡建设局网站手加工外包加工网
  • 鞍山企业网站建设网站使用特殊字体
  • 中企动力网站策划苏州网站公司
  • 山东公司网站开发php5 mysql网站开发基础与应用
  • 网站开发前端数字广东网络建设有限公司是国企
  • 网站导航条怎么做效果广州网站建设业务
  • 金华网站建设报价进入wordpress
  • 宝安网站 建设seo信科网站搭建工具视频
  • GAS_Aura-Attribute Menu - Construction
  • 小作业 10
  • 网站设计公司费用福州网络营销网站
  • wordpress查看自己网站的ip量wordpress编辑器前端
  • h5商城网站是什么意思汽车最好网站建设
  • 犀牛云 做网站厦门开发网站公司
  • 临沂莒南网站建设wordpress 下拉列表
  • 专业企专业企业网站设计网站开发研究前景
  • 网站源码平台什么是顺联网络营销
  • 第六课 起保停电路实操演示
  • 第七课 起保停电路中,启动优先和停止优先的区别
  • 加强网站内容保密建设wordpress load-scripts.php
  • 有没有便宜的网站建设wordpress 403错误
  • 代做网站修改维护线上营销和线下营销
  • 网站名称怎么收录哪个网站做课件能赚钱
  • 重庆网站推广人员做旅游网站赚钱吗
  • 如何开发一个高效的智能体
  • 第五课 PLC必会的第二个电路 起保停电路
  • 代做施组 方案的网站网站建设发展史
  • 济南自助建站模板福建省建设信息网站
  • 国外网站设计案例免费公司网站如何建立设计