The copy constructor is a special kind of constructor which creates a new object which is a copy of an existing one, and does it efficiently.
The copy constructor receives an object of its own class as an argument, and allows to create a new object which is copy of another without building it from scratch.

There are 3 situations in which the copy constructor is called:

  1. When we make copy of an object.
  2. When we pass an object as an argument by value to a method.
  3. When we return an object from a method by value.