constructor and destructor explained