数组成员是否在C ++中被深度复制?

对于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 ++类,我们不需要为数组成员编写自己的副本构造函数和赋值运算符,因为默认行为是对数组进行深度复制。