绝不在构造和析构过程中调用virtual函数
- 在derived class构造中的base class构造期,调用的virtual函数不会是派生类对应的实现,原因是因为虚表指针的初始化时机造成的。虚表指针会在进入到构造函数体之前被初始化,在进入到base class的构造函数体之前,虚表指针被赋值为指向base class的虚函数表,在进入到derived class的构造函数体内之前才会被赋值为指向derived class的虚函数表。
- 另外在derived class对象的base class构造期间,对象的类型是base class而不是derived class。若使用运行期类型信息例如dynamic_cast和typeid,也会把对象视为base class类型。