从vptr角度解释
虚函数的调用是通过虚函数表来查找的,而虚函数表由类的实例化对象的vptr指针指向,该指针存放在对象的内部空间中,需要调用构造函数完成初始化。如果构造函数是虚函数,那么调用构造函数就需要去找vptr,但此时vptr还没有初始化!
从多态角度解释
1.虚函数主要是实现多态,在运行时才可以明确调用对象,根据传入的对象类型来调用函数;
2.构造函数是在创建对象时自己主动调用的,不可能通过父类的指针或者引用去调用,那使用虚函数也没有实际意义;
3.调用构造函数时还不能确定对象的真实类型(由于子类会调父类的构造函数);
4.构造函数的作用是提供初始化,在对象生命期仅仅运行一次,不是对象的动态行为,没有必要成为虚函数。