클래스 생성 시 컴파일러가 자동으로 생성해주는 함수는 생성자, 소멸자, 복사 생성자, 복사 대입 연산자 이렇게 4가지 있다.
이 중 복사 생성자와 복사 대입 연산자에 대해 알아보자.
복사 생성자는 객체의 복사본을 생성할 때 호출되는 생성자이다.
생성자나 소멸자와 마찬가지로 클래스를 작성할 때 복사 생성자를 생략하면 컴파일러에 의해 디폴트 생성자가 만들어진다.
객체 생성(선언)과 동시에 다른 객체를 복사하면 복사 생성자가 호출된다.
복사 대입 연산자는 같은 타입의 객체를 이미 생성되어 있는 객체에 값을 복사할 때 사용된다. 마찬가지로 따로 정의를 하지 않는 경우 컴파일러가 자동으로 생성한다.
이미 생성(선언)되어 있는 객체에 다른 객체를 복사하면 복사 대입 연산자가 호출된다.
가리키고 있는 포인터 변수를 바꾸는 것
즉, 참조하는 주소 값 자체를 바꿔 다른 곳을 참조하게 하는 것
주의 사항
두 개 이상의 포인터가 같은 곳을 참조할 수 있어, 원치 않는 원본 데이터의 변경이 발생 할 수 있다.
포인터 변수에 *를 붙혀 주소를(원본 데이터)에 참조하여 값을 복사
즉, 실질적인 데이터가 존재하는 곳의 주소를 가진 변수를 "참조"한다.
"역참조" 라고도 하는데 이처럼 포인터 변수자체를 참조하게 되면 원본 데이터에 직접 접근하게 되는 것이다.