Copy Constructor

The copy constructor is used to initialize an object with a different object of the same type, and the copy assignment operator is used to copy the value from one object to another of the same type.

class MyClass

{

public:

MyClass(); // default constructor

MyClass(const MyClass& rhs); // copy constructor

MyClass& operator=(const MyClass& rhs) // copy assignment operator

...

};

MyClass m1; // invoke default constructor

MyClass m2(m1); // invoke copy constructor

m1 = m2; // invoke copy assignement operator

Read carefully wen you see what appears to be an assignment, because the "=" syntax can also be used to call the copy constructor.

MyClass m3 = m2; // invoke copy constructor!

If a new object is being defined (such as m3 in the statement above), a constructor has to be called; it can't be an assignment. If no new object is being defined (such as "m1 = m2" statement above), no constructor can be involved, so it's an assignment.

The copy constructor is a particularly important function, because it defines how an object is passed by value.

bool doSomeThing(MyClass m);

...

MyClass aMyClass;

if(true == doSomeThing(aMyClass)) ...

The copying of aMyClass to m is done by MyClass's copy constructor. Pass-by-value means "call the copy constructor". Pass-by-reference-to-const is typically a better choice.