数组成员是否在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 Pointst2's str = Tutorial Point
因此,对于C ++类,我们不需要为数组成员编写自己的副本构造函数和赋值运算符,因为默认行为是对数组进行深度复制。
以上是 数组成员是否在C ++中被深度复制? 的全部内容, 来源链接: utcz.com/z/327068.html