1:never call virtual functions during construction or destruction.
ctor:During base class construction of a derived class object, the type of the objectis that of the base class. Not only do virtual functions resolve to the base class, but the parts of the language using runtime type information (e.g.,dynamic_cast and typeid) treat the object as a base class type
dtor:The same reasoning applies during destruction. Once a derived class destructor has run, the object's derived class data members assume undefined values, so C++ treats them as if they no longer exist. Upon entry to the base class destructor, the object becomes a base class object, and all parts of C++ — virtual functions,dynamic_casts, etc., — treat it that way.