Copy constructor (noun) - the member function called automatically to create a new object that is a copy of an object whose copy constructor is called.

Alright, for everyone who is not me, I apologize and will clean up that sentence a bit. (Disclaimer: all information contained in this writeup is the way things work in C++, so if your favorite Object Oriented language does it differently, it is not my concern right now). When an object is copied, its copy constructor is called. This happens when you pass an object by VALUE. In pass by reference, a reference (or pointer) to the object is passed to the function, so no new objects are created on the run-time heap.

The default copy constructor for an object performs a shallow copy of all data members into the new object. This is fine if your class contains simple integers for example. But, if your class contains pointers, only the address of the pointers is copied to the new object. The most common use for a copy constructor is to perform a deep copy. A deep copy is when you manually create new instances of all the anonymous heap variables your class uses.