PeriodicTask has a pure virtual member function, therefore users of it must define their subclasses. it's error-prone to leave it destructor non-virtual.
It violates Effective C++ item 7: Declare destructors virtual in polymorphic base classes.
It violates Effective C++ item 7: Declare destructors virtual in polymorphic base classes.