Game Develop

'값에 의한 전달'보다는 '상수객체 참조자에 의한 전달' 방식을 택하는 편이 대게 낫다. 본문

C++/Effective C++

'값에 의한 전달'보다는 '상수객체 참조자에 의한 전달' 방식을 택하는 편이 대게 낫다.

MaxLevel 2026. 2. 25. 19:24

 

 

참조자로 전달하는게 대개 나은 이유중 대표적인 이유가, 값에 의한 전달을 하면 복사비용이 크기 때문이다.

아마 이정도는 조금이라도 C++을 공부한 분들이시라면 꽤나 잘 알려진 내용이다.

매개변수로 전달되는 객체를 읽기전용으로 쓸거면 안전하게 const까지 붙여서 전달받는게 베스트이다.

 

그리고 책을 보면 참조자로 전달해야만 하는 케이스가 또 있는데, 사실 많이 발생하는 이슈일 것 같진 않지만 이런쪽으로 생각 해 본적은 없었어서 한번 남겨본다. 

 

 

대충 Parent와 Parent를 상속받는 Child가 있다고 가정하고...

 

bool Validate(Parent p);

 

라는 함수도 있다고 가정하자.

 

그리고 특정함수에서 아래와 같은 코드를 작성해보자.

 

Child c;

Validate(c);

 

자 여기엔 무슨 문제가 있을까?

c는 Child로 만들었는데, Validate에 매개변수로 복사될 때는 Parent로 복사되는 것이다.

 

즉, Child영역의 변수라던가 기타등등은 전부 잘려서 Validate함수로 복사되는 것이다. 이런것을 복사손실문제(Slicing Problem)이라고 부른다고 한다. (Object Slicing이라고도 부른단다)

뭐 Validate함수내에서 Parent 부분만 사용한다면 당장의 버그는 없을 수 있겠지만.. 사람일이란 게 또 모르는데다가 어차피 그렇게 확신할거면 안전하게 문법적으로 방지할 수 있기 때문에 매개변수를 값으로 넘겨받을 이유가 없다.

 

그렇기때문에 위와 같은 상황에서도 상수 참조자, 즉 const Parent& 이런식으로 넘겨받는게 이득이다.