构造函数不能为虚函数

Posted 清水寺扫地僧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构造函数不能为虚函数相关的知识,希望对你有一定的参考价值。

之前一直关注着析构函数为什么要设置为虚函数,倒是没有想着构造函数可否为虚函数的问题,对此,进行一下总结:

构造函数不能是虚函数,原因如下:

  • 虚函数对应一个虚指针,虚指针其实是存储在对象的内存空间的。如果构造函数是虚函数,就需要通过虚函数表中对应的虚函数指针(编译期间生成属于类)来调用,可对象目前还没有实例化,也即是还没有内存空间,何来的虚指针,所以构造函数不能是虚函数;
  • 虚函数的作用在于通过父类的指针或者引用来调用它的成员函数的时候,能够根据动态类型来调用子类相应的成员函数。而构造函数是在创建对象时自动调用的,不可能通过父类的指针或者引用去调用,所以构造函数不能是虚函数;

以上是关于构造函数不能为虚函数的主要内容,如果未能解决你的问题,请参考以下文章

构造函数不能为虚函数

构造函数为什么不能为虚函数

C++的构造函数为何不能为虚函数

C++ 构造函数不能是虚函数,基类析构函数应该为虚函数

牛客网刷题知识汇总2

构造函数和析构函数可以是虚函数吗