[C++] 왜 const 참조는 비용이 적게 들까?
카테고리: Cpp
태그: Why
이 글은 ‘왜 const 참조는 비용이 적게 들까?’ 라는 의문에서 시작하여 공부하고 정리한 글입니다.
const 참조는 ‘참조에 의한 전달’을 하여 ‘값에 의한 전달’을 할 때 생겨나는 비용이 발생되지 않는다.
코드 예시
void Foo(const Person& p);
왜 const 참조는 비용이 적게 들까?
- 기본적으로 C++는 함수로부터 객체를 전달 받거나 함수에 개체를 전달할 때 ‘값에 의한 전달’ 방식을 사용한다
- 그래서 함수 매개변수는 실제 인자의 ‘사본‘을 통해 초기화되며, 어떤 함수를 호출한 쪽은 그 함수가 반환한 값의 ‘사본‘을 돌려받습니다
- 그래서 사본을 생성하고 복사 생성자를 호출되는데 만약 객체가 부모를 상속 받고 있고 string 변수 3개를 가지고 있는다고 생각하면
- 본인 클래스 생성자, 부모 클래스 생성자, string 생성자 3개를 호출해서 총 5개의 생성자를 호출한다
- 거기에 소멸될 때를 생각해보면 총 5개의 소멸자가 호출된다
- 이처럼 ‘값에 의한 전달‘을 하면 그에 따른 비용이 많이 생긴다
- 하지만 ‘참조에 의한 전달‘을 하게 되면 그런 비용들은 발생되지 않는다
그러면 왜 앞에 const를 붙이는가?
- ‘값에 의한 전달’일 때는 함수 안에서 객체가 변경되는 것을 신경 쓰지 않아도 됐지만
- ‘참조에 의한 전달’일 때는 함수 안에서 객체가 변경될 수 있기 때문에 변경되는 것을 막기 위해
const
를 붙인다
또한 ‘참조에 의한 전달’을 하면 복사손실 문제가 없다
- 파생 클래스 객체가 기본 클래스 객체로서 전달되는 경우는 드물지 않게 접할 수 있는데,
- 이때 이 객체가 값으로 전달되면 기본 클래스의 복사 생성자가 호출되고,
- 파생 클래스 객체로 동작하게 해 주는 특징들이 ‘싹둑 잘려’ 떨어지고 만다.
- 하지만 참조로 전달되면 문제가 해결된다
참조
💻 열심히 공부해서 작성 중이니 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 알려주시면 감사하겠습니다! 😸
댓글 남기기