복사 생성자(Copy Constructor)
이해한 만큼만 정리 해봅시다.
C++클래스에서 컴파일러가 기본적으로 만드는 생성자는 총 두 개 이다.
1. 기본 생성자 mainGame();
2. 복사 생성자 mainGame(const mainGame& mg);
3. 복사 대입 연산자
복사 생성자는 이니셜라이저를 이용해 클래스 멤버 변수 값들을 1:1로 복사한다. 클래스의 복사 생성을 할 수 있게 해준다
만일, 포인터 변수를 사용하여 클래스 복사를 시도한다면, 복사 되는 값은 데이터 원형이 아닌 원형을 가리키는 주솟값을 가지게 된다. 때문에 소멸시 빈 공간 소멸 명령을 하여 오류 발생할 가능성이 있다.
위 오류 해결 방법
1. 주솟값 복사 생성자를 사용하지 않는다.
2. 복사 시 주솟값이 아닌, 문자열 자체를 복사한다.
* 문자열 자체 복사 시 주의사항
String str1 = "string"; <=기본 생성자 호출
String str2 = str1; <=복사 생성자 호출 객체를 만들며 복사를 시도 하면 복사 생성자를 호출하기에 오류 해결
String str2(str1); <=복사 생성자 호출
* 복사 생성자에서 & 참조자를 사용하는 이유
복사 생성자는 매개 변수에 객체가 복사될 때, return으로 임시 공간으로 객체가 복사될 때, 두번 호출 된다.
참조자를 사용하지 않으면 복사 생성자를 호출하는 과정에서 매개 변수로 객체가 복사되어 다시 복사 생성자를 호출 하게 되기 때문
* 복사 생성자에서 const 를 사용하는 이유
임시 데이터를 받아들이기 위함
복사 시 임시 객체를 만들어 해당 객체를 원하는 곳으로 복사 처리 작업을 한다. 즉, 이 임시 객체는 원본을 그대로 유지해야 하는, 절대 변해선 안되는 값이기 때문에 const를 써 수정가능성을 원천 차단 하는 이유이다.
댓글
댓글 쓰기