Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

배열 구성원은 C++에서 깊이 복사됩니까?

<시간/>

C/C++의 경우 동일한 유형의 다른 변수에 구조체(또는 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++ 클래스의 경우 기본 동작이 배열의 전체 복사이기 때문에 배열 구성원에 대한 자체 복사 생성자와 할당 연산자를 작성할 필요가 없습니다.