Possible Duplicate:
How are C array members handled in copy control functions?
If I don't override the operator =
of a class, it will use default memberwise assignment.
But what does it mean?
struct A {
int array[100];
};
A a;
A b=a;
No error. How does b
copes a
'sarray
? Normally array_b = array_a
is invalid.
Another exampe:
struct A {
vector<int> vec;
};
A a;
A b=a;
How does b
copes a
'svec
? Through assignment(vec_b = vec_a
), constructor(vec_b = vector<int>(vec_a)
) or other mystery way?
A b=a;
Is not assignment, it is called as Copy Initialization.
The implicitly generated copy constructor is called to create an new object b
from the existing object a
.
The implicitly generated copy constructor makes a copy of the array
member.
For completeness I am going to add here the standard citation from the marked duplicate.
C++03 Standard: 12.8 (Copying class objects)
Each subobject is copied in the manner appropriate to its type:
- if the subobject is of class type, the copy constructor for the class is used;
- if the subobject is an array, each element is copied, in the manner appropriate to the element type;
- if the subobject is of scalar type, the built-in assignment operator is used.
If the members have copy constructors, they get invoked. If not, the default copy constructor does the equivalent of memcpy. See Memberwise Assignment and Initialization.
In the case of non-pointer arrays, each element is copied.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With