The ‘~’ character denotes the destructor of the class. I don’t think you actually need it, I usually add it just in case I need it later.
It’s virtual so that any derived class destructors are called in order when a pointer to a base class is deleted.