Destructors are functions with the same name as the class but preceded by a tilde (~).
The first form of the syntax is used for destructors declared or defined inside a class declaration; the second form is used for destructors defined outside a class declaration.
Several rules govern the declaration of destructors. Destructors:
Do not accept arguments.
Cannot specify any return type (including void).
Cannot return a value using the return statement.
Cannot be declared as const, volatile, or static. However, they can be invoked for the destruction of objects declared as const, volatile, or static.
Can be declared as virtual. Using virtual destructors, you can destroy objects without knowing their type — the correct destructor for the object is invoked using the virtual function mechanism. Note that destructors can also be declared as pure virtual functions for abstract classes.