Re: A temporary created for the return reference from Assignement Operator?
<pvinodhkumar@gmail.com> wrote:
On Saturday, June 29, 2013 7:20:32 PM UTC+5:30, Paavo Helde wrote:
pvinodhkumar@gmail.com wrote in news:ea56215d-9397-4a7f-a37b-fc9c6b0e3bf1
@googlegroups.com:
A& A::operator=(const A& aObject_in)
{
[...]
return *this; // A temporary created here?
}
No, you have declared the function to return a reference so no temporary is
created, just a reference to the this object is returned. Look up C++
references in your C++ book.
hth
Paavo
int main()
{
A a1;
A a2;
a2 = a1;
}
Let us examine the stament a2=a1;
- Assignement operator returns a reference here
- Then, A2 object is assigned with a reference returned?
What happens to the previous object a2 here?
When we say copying happens through the assignment operator things look ok.
However there is already an a2 object, and one more reference is
returned from the assignement.
Will it be correct if we say, the returned reference is nothing but the
reference to the a2 object itself as assignement actually initiated on a2?
You are confusing objects and values here. If you assign an object to
another, you only assign the _value_ of that object.
That means, a2 always remains the same object, but changes its value.
Consider the following snippet. It uses objects of some imaginary 'String'
class, but it's valid for all other objects:
String s1 = "aa";
// s1 is an object
// s1 has the value "aa"
String s2 = "bb";
// s2 is an object
// s2 has the value "bb"
String& r1 = s1;
// r1 is a reference to s1
// r1 has the value "aa"
String& r2 = s2;
// r2 is a reference to s2
// r2 has the value "bb"
s2 = s1;
// s2 is still the same object
// s2 has now the value "aa"
// IMPORTANT: r2 is still a reference to s2 and has now also the value
"aa"!
r2 = "cc"
// r2 has now the value "cc"
// r2 is STILL a reference to s2
// s2 has now also the value "cc"
// s1 and r1 have still the value "aa"
You can see that assignment only changes values, objects retain their
identity and references always point to the same object, even if the value
of that object changes.
Tobi