zoukankan      html  css  js  c++  java
  • 构造函数不能为虚函数的原因

      对于构造函数不能为虚函数的原因,查了挺多资料,总结出以下三个比较易理解并且比较靠谱的原因:

    • 原因一
      • 虚函数的意思就是开启动态绑定,程序会根据对象的动态类型(基类还是子类)来选择要调用的方法。然而在构造函数运行的时候,这个对象的动态类型还不完整,压根就没有办法确定它到底是什么类型,故构造函数不能动态绑定。(动态绑定是根据对象的动态类型,在调用构造函数之前,这个对象根本就不存在,它怎么动态绑定?)
    • 原因二
      • 当我们创建一个对象的时候,第一步是申请需要的内存,第二步就是调用构造函数,然后在构造函数中初始化vtable和vptr。试想,如果构造函数是虚函数,那必然需要通过vtable来找到虚构造函数的入口地址,而此时我们申请的内存还没有做任何初始化,还没有vtable和vptr,就无法调用这个虚构造函数,这就造成了矛盾。因此,构造函数不能是虚函数。
    • 原因三
      • 虚函数的作用在于通过父类的指针或者引用来调用它的时候能够变成调用子类的那个成员函数。而构造函数是在创建对象时自动调用的,不可能通过父类的指针或者引用去调用,因此也就规定构造函数不能是虚函数。

      如果还有其他比较靠谱的原因,请各位告知,我将修改加上。

  • 相关阅读:
    原生js实现分页功能
    webpack4 前端框架基础配置实例-解决css分离图片路径问题
    Vue cli2.0 项目中使用Monaco Editor编辑器
    Vue相关开源项目库汇总
    git常用配置
    Python 2 下载与安装
    sqlmap下载与安装
    IDEA中集成gitee插件
    双系统之删除Ubuntu系统
    IntelliJ IDEA安装注册教程
  • 原文地址:https://www.cnblogs.com/yanqi0124/p/3826633.html
Copyright © 2011-2022 走看看