• C++里的构造函数为什么不能为虚函数


      以下代码在编译时会出错,原因是构造函数不能为虚函数。

     1 class Student {
     2 public:
     3     virtual Student()
     4     {
     5         this->dwNo = 0;
     6     }
     7 
     8 private:
     9     int dwNo;
    10 };

      那么构造函数为什么不能为虚函数呢?

      这里你需要知道一个概念,那就是虚函数表vtbl,每一个拥有虚成员函数的类都有一个指向虚函数表的指针。对象通过虚函数表里存储的虚函数地址来调用虚函数。

      那虚函数表指针是什么时候初始化的呢?当然是构造函数。当我们通过new来创建一个对象的时候,第一步是申请需要的内存,第二步就是调用构造函数。试想,如果构造函数是虚函数,那必然需要通过vtbl来找到虚构造函数的入口地址,显然,我们申请的内存还没有做任何初始化,不可能有vtbl的。因此,构造函数不能是虚函数。

  • 相关阅读:
    Git 基本操作
    Git 基础
    MarkDown教程
    Python常用函数
    Python生成器
    Python列表生成式
    Python迭代
    Python切片
    Python函数
    Python不可变对象
  • 原文地址:https://www.cnblogs.com/hezhixiong/p/4548729.html
Copyright © 2020-2023  润新知