The rationale behind this design is quite apparent: the functionality is typically used for the cases when you need to create a
clone of another object, which is typically complex enough. And '&' means
pass-by-reference. Why pass by value and waste performance on copying everything memberwise on stack (this is this what
pass-by-value would do, without '&') when a developer will clone it anyway? Would be wasteful and pointless.
Moreover, it is important to use
const
for the source object, to prevent accidental modification of it. Please see the page referenced in Solution 1.
See also:
http://en.wikipedia.org/wiki/Clone_%28computing%29[
^].
—SA