Pointer vs Reference
참조자는 필수 대상, 포인터는 선택 가능한 주소를 표현한다
둘 다 다른 값을 간접적으로 다루지만, 코드가 독자에게 약속하는 의미가 다릅니다. 존재가 보장되면 참조자, 없을 수도 있거나 대상을 바꿔야 하면 포인터가 더 정확합니다.
참조자
T& ref = obj;
계약
대상이 반드시 존재한다.
변경
원본을 직접 읽고 쓴다.
제약
다른 대상에 다시 묶이지 않는다.
포인터
T* ptr = &obj;
계약
null일 수 있음을 확인해야 한다.
변경
주소를 바꿔 다른 대상을 가리킬 수 있다.
제약
접근 전 역참조와 유효성 판단이 필요하다.
const 참조
const T& ref
계약
복사 없이 읽기만 한다.
변경
함수 내부에서 원본 수정을 막는다.
제약
큰 객체 입력에서 가장 흔한 읽기 전달 방식이다.
항상 존재하는 원본을 바꾼다
T&
를 사용해 수정 의도를 드러냅니다.
없을 수도 있거나 대상을 바꾼다
T*
를 사용해 null과 주소 변경을 코드로 표현합니다.
큰 객체를 읽기만 한다
const T&
로 복사 비용과 수정 위험을 함께 줄입니다.