今天在看网上一篇帖子的时候看到这个问题,试讲关于C++对象虚函数表和类型信息的(RTTI)的,正好看到了如下内容:
这个是为什么在构造函数中不能调用虚函数的原因 .因为任何时候在基类中的虚函数调用,都不可能到达子类的实现,因为子类的虚表初始化是在调用完基类的构造之后发生的. 因此在基类中调用虚函数永远只能调用到自己的实现或者更基类的实现,不可能跳转到子类的实现.
也就是说,如果你本类的构造函数中调用了虚函数,那么也只能调用到你本类和你上层基类中的虚函数,而不可能调到你派生类中的虚函数实现。
因为构造函数的调用要么是new一个本类对象,要不就是在new派生类的时候调用你本类的构造函数。
而在派生类中调用你本类构造函数的时候,该类(派生类)对象的虚函数表指针还只是指向了基类(也就是你写的类)的虚函数表,因此,通过该虚函数表,你无法调用到派生类对象自己的虚函数,只有到基类构造函数完成的以后,虚函数表的指针才指向到派生类的自己的虚函数表。
附上原文地址:http://blog.sina.com.cn/s/blog_41299a970101fzfz.html