Possible Duplicate:
Why should the copy constructor accept its parameter by reference in C++?
i know that a copy constructor must have a reference as a parameter, to avoid an 'infinite number of calls' to itself. my question is - why exactly that happens, what is the logic behind it?
CExample(const CExample& temp)
{
length = temp.length;
}
assume your argument to the copy C'tor was passed by value, the first thing the C'tor would have done, was copying the argument [that's what every function, including constructors do with by-value arguments]. in order to do so, it would have to invoke the C'tor again, from the original to the local variable... [and over and over again...] which will eventually cause an infinite loop.
Copy constructors are called on some occasions in C++. One of them is when you have a function like
void f(CExample obj)
{
// ...
}
In this case, when you make a call
CExample x;
f( x );
CExample::CExample
gets called to construct obj
from x
.
In case you have the following signature
void f(CExample &obj)
{
// ...
}
(note that obj
is now passed by reference), the copy constructor CExample::CExample
does not get called.
In the case your constructor accepts the object to be copied by value (as with the function f
in the first example), compiler will have to call the copy constructor first in order to create a copy (as with the function f
, again), but... oops, we have to call the copy constructor in order to call the copy constructor. This sounds bad, doesn't it?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With