Bootstrap

C++-为什么基类的构造函数不能定义为虚函数?

回答如下:

在c++中,基类的构造函数不能定义为虚函数,原因有以下几点:

  • 在创建派生类对象时,首先执行基类的构造函数,来初始化对象中属于基类的那一部分元素,这时派生类的元素尚未初始化。如果调用的是虚构造函数,虚函数的执行依赖于虚函数表,因为派生类中的虚函数表指针没有被初始化,那么编译器将无法知道应该调用哪一个虚构造函数,导致程序无法继续进行。
  • 在创建派生类对象时,会自动调用构造函数,无法通过父类的指针或引用来调用虚函数使其执行是来自派生类的函数版本。因此,也不符合虚函数的应用场景。
  • 执行构造函数时,默认构造顺序从基类元素到派生类元素,可以完成对所有元素的初始化。因此,无需自定义虚构造函数,来避免出现像析构函数那样的资源管理问题,所以虚构造函数存在的实际意义也不大。
;