본문 바로가기
C++

C++ 복사 생성자와 디폴트 복사 생성자

by 여름코딩 2023. 3. 2.
반응형

안녕하세요 판타지코딩입니다!

 

오늘은 복사 생성자와 디폴트 복사 생성자에 대해서 공부해 보겠습니다!

 

복사 생성자와 디폴트 복사 생성자

 

1. 디폴트 복사 생성자

디폴트 복사 생성자는 직접 정의하지 않아도 자동으로 호출되는 생성자입니다. 객체 생성시 기존 객체를 인자로 받아 복사할 때 복사 생성자가 호출되는데, 디폴트 복사 생성자는 정의하지 않아도 자동으로 생성됩니다. 복사할 멤버 변수 중에 동적 할당을 받는 변수가 있다면, 디폴트 복사 생성자가 호출되면 메모리를 할당하는 부분은 복사되지 않고, 메모리의 주소값만 복사됩니다. 그러므로 기존의 객체와 새로 복사한 객체의 멤버 변수가 같은 메모리를 공유하게 됩니다. 이것을 바로 '얕은 복사'라고 합니다. 얕은 복사로 인한 메모리 공유를 막기 위해 깊은 복사를 하기 위해서 '복사 생성자'를 정의합니다.

 

2. 복사 생성자

복사 생성자는 깊은 복사를 하기 위해서 직접 정의한 생성자입니다. 위에서 이야기한 동적 할당한 멤버 변수를 복사할 때 메모리의 주소값을 복사하지 않고 메모리를 생성 후 값을 복사하도록 하기 위해서 해당 과정을 생성자에 할당합니다. 그러므로 동적 할당을 받는 멤버 변수를 복사할 때 메모리를 할당하는 코드를 작성하고, 데이터를 복사하는 과정을 작성해줍니다. 그렇게 되면 깊은 복사를 수행해서 별도의 메모리에 데이터를 복사하는 효과를 줍니다.

 

그럼 오늘은 디폴트 복사 생성자와 복사 생성자에 대해서 공부해 보겠습니다.

 

감사합니다!

반응형