destructor should be made virtual