Why must a copy constructor\'s parameter be passed by reference?
The alternative to pass-by-reference is pass-by-value. Pass-by-value is really pass-by-copy. The copy constructor is needed to make a copy.
If you had to make a copy just to call the copy constructor, it would be a conundrum.
(I think the infinite recursion would occur in the compiler and you'd never actually get such a program.)
Besides rational reasons, it's forbidden by the standard in §12.8/3:
A declaration of a constructor for a class X is ill-formed if its first parameter is of type (optionally cv- qualified) X and either there are no other parameters or else all other parameters have default arguments.
It is necessary to pass object as reference and not by value because if you pass it by value its copy is constructed using the copy constructor.This means the copy constructor would call itself to make copy.This process will go on until the compiler runs out of memory.