A copy constructor is a device in CeePlusPlus and JavaLanguage for taking an existing object, and making a new object of the same type--one which is identical (in some respects, at least) for the source object.

In JavaLanguage, there isn't much difference between a CopyConstructor and any other constructor; a copy constructor usually takes, as a parameter, an object of the same type to interrogate for construction data.

 class Guy
 {
   String name;
   int age;

   public Guy( String aName, int anAge )
   {
     name = aName;
     age  = anAge;
   }

   /* copy constructor */
   public Guy( Guy aGuy )
   {
     name = aGuy.getName();
     age  = aGuy.getAge();
   }
 }

In C++, the copy constructor takes the signature T (const T&), and can be invoked with either standard constructor syntax, or assignment syntax.


 class Guy
 {
  private:
   const char *name;
   int age;

  public:
   Guy( const char *aName, int anAge ) : name(aName), age(anAge) {}

   /* copy constructor */
   Guy( const Guy &aGuy ) : name (aGuy.name), age (aGuy.age) {}
 }

 int main (int argc, char **argv)
 {
     Guy thisGuy ("John Doe", 34);
     Guy thatGuy (thisGuy);          // same as thisGuy
     Guy theOtherGuy = thisGuy;      // also same as thisGuy
 }

See also CastConstructor

See RuleOfTheBigThree