Оба копируют элементы в массиве (вместо того, чтобы ничего не делать или копировать указатель).
struct X
{
char data_[100];
};
int main ()
{
X orig, copy_assign;
orig.data_[10] = 'a';
copy_assign = orig;
X copy_constructor(orig);
printf("orginal10:%c, copy_assign10:%c, copy_constructor10:%c\n",orig.data_[10],copy_assign.data_[10],copy_constructor.data_[10]);
copy_assign.data_[10] = 'b';
printf("original10:%c, copy_assign10:%c, copy_constructor10:%c\n",orig.data_[10],copy_assign.data_[10],copy_constructor.data_[10]);
copy_constructor.data_[10] = 'c';
printf("original10:%c, copy_assign10:%c, copy_constructor10:%c\n",orig.data_[10],copy_assign.data_[10],copy_constructor.data_[10]);
return 0;
}
результаты выполнения:
orginal10:a, copy_assign10:a, copy_constructor10:a
original10:a, copy_assign10:b, copy_constructor10:a
original10:a, copy_assign10:b, copy_constructor10:c
- Из первой строки результата, мы можем видеть, что по крайней мере что-то было скопировано (это либо элементы в массиве, либо был скопирован указатель массива).
- Из следующих двух строк мы можем видеть, что при изменении копии назначаются объекты и копиямассив построенных объектов не изменил исходный массив.Поэтому мы заключаем, что элементы были скопированы вместо указателя массива.
Надеюсь, этот пример понятен.