#1. 개념
1. 참조에 의한 전달(Call-by-reference)
void swap (int& first, int& second)
{
int tmp = first;
first = second;
second = tmp;
}
참조형은 변수의 별명으로, 특정 변수가 할당 받은 메모리 영역을 참조하며, 역참조 연산을 자동으로 수행하는 포인터입니다. 따라서, '참조에 의한 전달'은 함수 인자 전달 방식 중 하나로 함수 매개변수를 '참조형'으로 선언하여 활용 가능합니다. 참조에 의한 전달은 원본 면수가 가리키는 메모리 영역을 참조형 매개 변수로 하여금 공유하도록 하여, 본문에서 발생하는 변경 작업들이 원본 변수에 영향을 줍니다.
2. '값에 의한 전달'의 단점
1. 비효율성: 큰 객체 혹은 struct를 인자로 전달 받을 경우, '값에 의한 전달'은 메모리 오버헤드와 실행 시간의 증가 문제가 발생할 수 있습니다.
2. 얕은 복제: 얕은 복제를 통해 댕글링 포인터를 야기시켜 메모리 릭의 위험성이 있습니다.
3. '값에 의한 전달' vs '참조에 의한 전달'
- 대상 변경: 포인터를 활용할 경우, 가리키는 대상을 변경할 수 있습니다. 하지만, 참조형의 경우 가리키는 대상을 변경할 수 없습니다.
- 디폴트 인자: 포인터 변수의 경우 함수 선언 시 디폴트 인자를 활용가능합니다. 하지만, 참조형 변수는 디폴트 값을 설정할 수 없습니다.
- 메모리 해제 담당: 포인터 변수는 이를 넘겨 받는 측에서 메모리 해제를 담당합니다. 하지만, 참조형 변수는 넘겨 받는 측에서 메모리 해제를 담당하지 않습니다.
- 가독성: 참조형 변수 활용 코드는 가독성을 높여줍니다.
- 유효하지 않은 메모리 영역: 참조형 변수는 유효하지 않은 메모리 영역을 가리킨느 것이 불가능합니다. 하지만, 포인터 변수의 경우 '댕글링 포인터'가 되어 유효하지 않은 메모리 영역을 가리킬 수 있습니다.
'언어 > Basic C++' 카테고리의 다른 글
[Basic C++] #25_우측 값 참조, 이동 시맨틱 (0) | 2022.05.14 |
---|---|
[Basic C++] #24_우측 값 참조, 대입 연산의 좌항과 우항 (0) | 2022.05.14 |
[Basic C++] #21_가상 상속 (0) | 2022.05.01 |
[Basic C++] #20_virtual 키워드, vtable 오버헤드 (0) | 2022.05.01 |
[Basic C++] #19_virtual, virtual의 내부 구현 (0) | 2022.04.30 |