우선 reference도 결국 내부적으론 Pointer를 사용하므로 작동원리는 동일하다.
하지만 차이점이 몇가지 존재한다.
Pointer
1) null값 허용
2) int *p = &a; // 대상의 주소값을 할당
3) 참조대상 변경가능
Reference
1) null값 불가능
2) int &p = a; // 참조 대상을 그대로 할당
3) 참조대상 변경불가
C++는 기본적으로 함수로부터 객체를 전달받거나 함수에 객체를 전달할 떄
Call by value 방식을 사용
이는 복사생성자로 인한 고비용의 연산, 함수 매개변수는 실제 인자의 사본을 통해 초기화, 어떤 함수를 호출한 쪽은
그 함수가 반환한 값의 사본을 돌려받음
사본 만들어 내는곳 = 복사생성자
Call by reference 사용시 객체 그대로를 전달하기 떄문에
복사생성자의 생성자, 소멸자호출이 일어나지 않아 비용이 절감된다.
원본값의 변경이 일어날 수 있으나 const를 사용하여 사전에 방지할 수 있다.
'Language > C++' 카테고리의 다른 글
POD / Standard Layout Type / Trivial Type (0) | 2019.03.03 |
---|---|
객체초기화 ' = ' , ' ( ) ' 의 차이점 (0) | 2019.03.03 |
const / #define / constexpr 차이점 (0) | 2019.03.01 |
Smart Pointer (0) | 2019.03.01 |