在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