Answer: No, in C++, a copy constructor doesn’t support pass by value but pass by reference only. It cannot accept object parameter by value and it should always receive it as a reference. An error, “Illegal copy constructor” will be thrown if we receive object by value.
Copy constructor by value:
Syntax : Mobile(const Mobile c_obj)// throws compiler error
Copy constructor by reference:
Syntax : Mobile(const Mobile& c_obj)//OK
REASON:
We know that if use below syntax for class Mobile i.e. initialize the object at the time of object creation, a class copy constructor would get called.
Mobile object1;
Mobile object2 (object1) OR Mobile object2=object1; // in both cases copy constructor get called.
So,If we take by value case i.e. Mobile(const Mobile c_obj),
on calling Mobile object2 (object1), compiler will interpret it as Mobile c_obj= object1;
Again, this the statement would call same copy constructor and same for over and over.
Hence, It goes in recursion.
That’s why it is prevented at the compile time itself.
Example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
// Copy constructor parameter by value throws an // Error : Illegal copy constructor class Mobile{ public: Mobile(){} // Below copy constructor( object by value) will throw a compile time error i.e. //illegal copy constructor: first parameter must not be a 'Mobile' /*Mobile(const Mobile obj){ printf("copy constructor by value\n"); }*/ //Copy constructor always shoud accept clas object by reference. Mobile(const Mobile& obj){ printf("copy constructor by reference\n"); } }; int main() { Mobile object1; Mobile object2=object1;//calling copy constructor return 0; } |