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. 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