Does a derived class dtor need to explicitly call the base destructor?
No, never explicitly call a destructor (where “never” means “rarely”). A derived class’s destructor (whether or not you explicitly define one) AUTOMATICALLY invokes the destructors for member objects and base class subobjects. Member objects are destroyed in the reverse order they appear within the class, then base class subobjects are destroyed in the reverse order that they appear in the class’s list of base classes.