数组成员是否被深度复制?

在C/C++中,我们可以将一个结构(或C++中的类)赋值给另一个相同类型的变量。当我们将一个结构变量分配给另一个结构变量时,该变量的所有成员都会复制到另一个结构变量。但是,当结构包含指向动态分配内存的指针时会发生什么,如果它包含一个数组呢?

null

在下面的C++程序中,Stutt变量ST1包含指向动态分配内存的指针。当我们将st1分配给st2时,st2的str指针也开始指向相同的内存位置。这种复制被称为 浅拷贝 .

# include <iostream>
# include <string.h>
using namespace std;
struct test
{
char *str;
};
int main()
{
struct test st1, st2;
st1.str = new char [20];
strcpy (st1.str, "GeeksforGeeks" );
st2 = st1;
st1.str[0] = 'X' ;
st1.str[1] = 'Y' ;
/* Since copy was shallow, both strings are same */
cout << "st1's str = " << st1.str << endl;
cout << "st2's str = " << st2.str << endl;
return 0;
}


输出: st1的str=xyeksforgeks st2的str=xyeksforgeks

那么,阵列呢? 需要注意的是,数组成员不是浅复制的,编译器会自动执行 深度复制 用于数组成员。 .在下面的程序中,struct test包含数组成员str[]。当我们将st1分配给st2时,st2有一个数组的新副本。所以当我们改变st1的str[]时,st2没有改变。

# include <iostream>
# include <string.h>
using namespace std;
struct test
{
char str[20];
};
int main()
{
struct test st1, st2;
strcpy (st1.str, "GeeksforGeeks" );
st2 = st1;
st1.str[0] = 'X' ;
st1.str[1] = 'Y' ;
/* Since copy was Deep, both arrays are different */
cout << "st1's str = " << st1.str << endl;
cout << "st2's str = " << st2.str << endl;
return 0;
}


输出: st1的str=xyeksforgeks st2的str=geeksforgeks

因此,对于C++类,我们不需要为数组成员编写自己的复制构造函数和赋值操作符,因为默认行为是数组的深度副本。

如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享