The destructor should be virtual
Free the memory