对于C / C ++,我们可以将struct(或仅C ++中的类)变量分配给相同类型的另一个变量。在将一个结构变量分配给另一个结构变量时,该变量的所有成员都被复制到另一个结构变量。在这种情况下,就会出现一个问题,当结构由数组组成时会发生什么?
现在,我们必须讨论数组。要注意的主要一点是,数组成员不作为浅副本复制;对于数组成员,编译器会自动完成Deep Copy。在下面的程序中,结构测试由数组成员str1 []组成。当我们能够将st1分配给st2时,st2具有该数组的新副本。因此,当我们修改或更改st1的str []时,不会修改或更改st2。
# include <iostream> # include <string.h> using namespace std; struct test{ char str1[20]; }; int main(){ struct test st1, st2; strcpy(st1.str1, "Tutorial Point"); st2 = st1; st1.str1[0] = 'X'; st1.str1[1] = 'Y'; /* Because copy was Deep, both arrays are different */ cout<< "st1's str = " << st1.str1 << endl; cout<< "st2's str = " << st2.str1 << endl; return 0; }
输出结果
st1's str = XYtorial Point st2's str = Tutorial Point
因此,对于C ++类,我们不需要为数组成员编写自己的副本构造函数和赋值运算符,因为默认行为是对数组进行深度复制。