[복사 생성자, 복사 대입 연산자]

실버타운·2023년 7월 24일

C++

목록 보기
6/10

클래스 생성 시 컴파일러가 자동으로 생성해주는 함수는 생성자, 소멸자, 복사 생성자, 복사 대입 연산자 이렇게 4가지 있다.

이 중 복사 생성자와 복사 대입 연산자에 대해 알아보자.


복사 생성자와 복사 대입 연산자

복사 생성자는 객체의 복사본을 생성할 때 호출되는 생성자이다.
생성자나 소멸자와 마찬가지로 클래스를 작성할 때 복사 생성자를 생략하면 컴파일러에 의해 디폴트 생성자가 만들어진다.

객체 생성(선언)과 동시에 다른 객체를 복사하면 복사 생성자가 호출된다.

복사 대입 연산자는 같은 타입의 객체를 이미 생성되어 있는 객체에 값을 복사할 때 사용된다. 마찬가지로 따로 정의를 하지 않는 경우 컴파일러가 자동으로 생성한다.

이미 생성(선언)되어 있는 객체에 다른 객체를 복사하면 복사 대입 연산자가 호출된다.


얕은 복사 (참조만 복사)

가리키고 있는 포인터 변수를 바꾸는 것
즉, 참조하는 주소 값 자체를 바꿔 다른 곳을 참조하게 하는 것

주의 사항

두 개 이상의 포인터가 같은 곳을 참조할 수 있어, 원치 않는 원본 데이터의 변경이 발생 할 수 있다.


깊은 복사 (값을 복사)

포인터 변수에 *를 붙혀 주소를(원본 데이터)에 참조하여 값을 복사
즉, 실질적인 데이터가 존재하는 곳의 주소를 가진 변수를 "참조"한다.

"역참조" 라고도 하는데 이처럼 포인터 변수자체를 참조하게 되면 원본 데이터에 직접 접근하게 되는 것이다.

profile
개발 공부 일지

0개의 댓글