构造函数与析构函数可不可以是虚函数?原因是什么?
构造函数不能是虚函数但是析构函数通常确实虚函数。
为什么构造函数不能是虚函数?
假设构造函数是虚函数,那么他就需要通过vtable(简称虚基表)来调用,但是vtable却是在构造函数中进行初始化的,产生了矛盾,所以两者的顺序不能倒置。
析构函数可以是虚函数,且通常大多情况下都是作为虚函数。
因为虚基表已经在构造函数中初始化好了,我们通常通过基类的指针来销毁对象,如果析构函数不为虚函数的化,就不能正确识别对象类型,从而不能正确销毁对象。
为什么构造函数不能是虚函数?
假设构造函数是虚函数,那么他就需要通过vtable(简称虚基表)来调用,但是vtable却是在构造函数中进行初始化的,产生了矛盾,所以两者的顺序不能倒置。
因为虚基表已经在构造函数中初始化好了,我们通常通过基类的指针来销毁对象,如果析构函数不为虚函数的化,就不能正确识别对象类型,从而不能正确销毁对象。