在 C++ 中,数组成员是深度复制的吗?
在 C/C++ 中,我们可以将一个结构(或仅限 C++ 中的类)变量赋值给另一个同类型变量。在将一个结构变量赋值给另一个变量时,该变量的所有成员都会复制到另一个结构变量。在此情况下,会产生一个问题,即当结构包含一个数组时会发生什么?
现在,我们来讨论数组。需要注意的主要一点是数组成员不会作为浅拷贝复制;在数组成员的情况下,编译器会自动执行深度拷贝。在下面的程序中,结构体 test 包含数组成员 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++ 类中,我们不需要为数组成员编写自己的拷贝构造函数和赋值运算符,因为默认行为对于数组来说是深度拷贝。
广告
Data Structure
Networking
RDBMS
Operating System
Java
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP