본문 바로가기
Open API/API design

상수 참조로 입력 파라미터 전달

by 이재만박사 2017. 2. 9.

- 함수가 입력 파라미터를 변경하지 않는 상황이라면 포인터보다는 상수 참조를 통해 입력  파라미터를 전달

- 반대로 출력 파라미터의 경우 비상수 참조보다는 포인터를 사용

- 그 이유는 클라이언트에게 이 변수는 분명히 변경될 수 있다는 것을 알리기 위해서임


C++에서 함수의 파라미터 전달은 "값"으로 처리

- 이 말은 함수에 전달하는 객체는 복사되고 복사된 객체는 함수가 결과를 리턴할 때 메모리에서 해제

- 원본 객체의 복사 생성자와 소멸자 호출에 대한 오버헤드 발생


* 상수 참조로 객체에 전달

- 객체의 포인터만 함수로 전달

- 이 메서드는 객체 변경이 불가


- 내장형 타입의 경우에는 굳이 그럴 필요가 없다

- 이미 최소한의 공간만을 사용 -> CPU 레지스터에 저장하기에 전혀 부담이 없음

- 게다가 STL 반복자와 함수 객체는 값으로 파라미터를 전달 받도록 설계


* 복사 손실

- 이 문제는 메서드가 기본 클래스를 값으로 전달받으려 할 때 사용자가 기본 클래스에서 파생된 자식 클래스를 이 메서드에 전달하면 자식 클래스가 가진 멤버들은 상실

- 컴파일 시에 값으로 전달된 객체의 크기가 메서드가 선언한 기본 클래스의 크기로 결정

댓글