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

以上是 数组成员是否在C ++中被深度复制? 的全部内容, 来源链接: utcz.com/z/327068.html

回到顶部