Re: default implementation of assignment operator
"George" wrote:
I am wondering the default implementation of assignment
operator (e.g. when
we do not implement assignment operator in user defined
class, what will be
returned? temporary object? reference or const reference?
Default assignment operator has following signature (for
class `X'):
X& X::operator =(X&);
If all base classes of `X' and all its nonstatic members
have assignment operator that accepts const reference as a
parameter, then compiler generates this one:
X& X::operator =(const X&);
Otherwise it would have broken already existing code.
deep copy or shallow copy is used in default assignment
operator?
Shallow copy is used. It is called memberwise assignment. If
a member is an object and implements its own assignment
operator, then all the better, because its assignment
operator will be called in turn. Otherwise simple bitwise
copy is performed (as if `memcpy' is called).
That's why it important to provide assignment operator if
your class owns a pointer:
class X
{
public:
X() { m_p = new int[5]; }
~X() { delete[] m_p; }
private:
int* m_p;
};
X x1;
X x2;
x1 = x2; // oops!
In the above code `x1.m_p' is leaked because it is
overwritten by x1's copy; `x2.m_p' will be deleted twice -
one time in x1's destructor, then in x2's destructor.
There is so called "The Rule of Three" regarding this issue:
"Rule of three (C++ programming)"
http://en.wikipedia.org/wiki/Rule_of_three_(C++_programming)
I have the C++ Programming Book at hand, but can not find
it from Index page.
I am wondering what kind of a book it is that doesn't
discuss assignment operators.
HTH
Alex