A constructor is a function that:
*Has no return value
*Is implicitly called when an object of that particular class is created
It is generally good practice to have a destructor, even if you don't do anything in it.
A destructor is necessary if you have any memory in the object that needs deallocation (e.g. arrays created with the new operator), or if there are things that need to be done before the object goes away (rerouting the links in a linked list comes to mind).
When the object is destroyed, the destructor is implicitly called and will perform any statements within the destructor (where you can call delete[], for instance)