안녕하세요. 취업한 공대누나입니다.
오늘은 복사 생성자에 대해 알아보도록 하겠습니다.
1. 복사 생성자란?
C++에는 C언어와는 다르게 객체라는 것이 존재합니다.
객체에는 멤버 변수와 멤버 함수가 존재하지요.
Copy Constructor는 말 그대로 객체의 복사본을 생성할 때 호출되는 생성자입니다.
클래스를 작성할 때 복사 생성자를 생략하면 디폴트 생성자처럼 컴파일러가 알아서 만들어 넣어줍니다.
이걸 우리는 기본 복사 생성자라고 합니다.
객체간의 변수의 값을 복사해주며 호출시키는 객체의 선언과 동시에 초기화할 때 발생합니다.
다음 시간에 더 자세히 다루겠지만 기본적으로 얕은 복사를 제공합니다.
클래스 내에서 일반 생성자는 파라미터를 다르게 해서 여러개를 둘 수 있지만
복사 생성자는 파라미터를 자기 클래스 타입 참조 변수 하나만 가지며 때문에 하나의 복사 생성자만 존재할 수 있습니다.
복사 생성자의 형태는 아래와 같습니다.
상수로 선언된 참조자이며 type은 클래스(자기 자신)이 되는 것을 알 수 있습니다.
클래스이름(const 클래스이름 &rhs) |
rhs는 Right Hand Side의 약자입니다. 보통 이 이름을 많이 사용합니다.
const 예약어는 생략할 수도 있지만 일반적으로 붙여주는 것이 원칙입니다.
왜냐하면 원본의 값이 바뀌면 안되기 때문입니다.
인수는 참조자(&)로 전달을 하는데요. 참조자가 아니면 무한루프에 빠질 수 있습니다.
왜냐하면 참조가 아니라 그냥 rhs와 같게 되면 새로운 변수 선언으로 복사 생성자가 계속 호출되기 때문입니다.
복사 생성자는 객체 생성시 객체를 인자로 줄 경우
객체 생성시 객체를 대입할 경우 호출되게 됩니다.
예제로 한 번 보도록 하겠습니다.
2. 복사 생성자 예제
오른쪽 TEST test2(test1); 에 의해서 복사 생성자가 호출되게 됩니다.
여기서 test1을 원본으로 test2가 생성되는 것입니다.
다음 시간에는 얕은 복사와 깊은 복사에 대해 좀 더 다뤄보도록 하겠습니다.
'전자 공학 > C언어 C++' 카테고리의 다른 글
[C++ 독학하기] 12. this 포인터 (0) | 2021.03.14 |
---|---|
[C++ 독학하기] 11. 생성자와 소멸자 (0) | 2021.03.12 |
[C++ 독학하기] 10. 생성자 (0) | 2021.03.10 |
[C++ 독학하기] 8. 인라인 함수 개념 (0) | 2021.03.04 |
[C++ 독학하기] 7. 함수 다중 정의, 오버로딩 개념 (0) | 2021.03.02 |