I did not understand why the object to be copied has to be passed by reference inside the copy constructor?
Pass by reference in constructor
It would be infinitely recursive if you passed it in by value. Because copy constructor will call itself to create a copy every time and this would run infinitely.