Well you see:
in any function, passing an object argument by value would call the copy constructor of this object's class to make a copy of the argument to be used in the function.
it's no different for the copy constructor function, passing the argument by value would call the copy constructor who's argument is passed by value, so it needs to call the copy constructor which then calls the copy constructor......and so on. the process would fall in an infinite loop.
therefor the argument should be passed by value to avoid its being copied
hope this answers your question