Well if we are talking about the default copy constructor, then the disadvantage it suffers from is that i does a shallow copy of the class object.<br>Which means that if the class has some dynamic memory allocated or file pointers, the copied object will also point to the same memory location or files. That is the memory or file is not copied.
If the programer is defining the copy constructor, the compiler will invoke the copy constructor at the time of copying the members of the calling object to the members of the called objects. This will cretaes the problems if the object contains the pointer variables. The time copying is more if there are more number of object memebrs
A copy constructor is called when a new variable is created from an object. The default copy constructor does a shallow copy i.e; the copied object points to same old memory pointed by the parent object. If the object has some dynamic memory or pointers, it is better to create a copy constructor.<br><br>When a new copy constructor is written, assignment operator and destructor also should be written in the class.<br>
If you have all the member variable of built-in type and it do not have pointer member variable then writing copy constructor may inefficient because compiler may optimize the default copy constructor with function such as memcpy etc. It is best not to write one if not required.