Useful for free'ing memory that's allocated , say in the constructor for data members. Not freeing memory can cause leaks. Destructors DO NOT take parameters. They are distinguished by the parameters they accept and not on the values they return. Even though the return value has different types.
Distinction is made on the parameters being passed in.
No constructor or destructor. Although useless as such, we shall only worry about what code is implicitly generated for you. Make a copy of the passed parameter on the stack of the called function. This is leads to a memory fault.