| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- algorithm
- C++
- NRVO
- 2294
- 1563
- RVO
- UnrealEngine4
- C
- UE5
- 언리얼엔진5
- UnrealEngine5
- 팰린드롬 만들기
- 티스토리챌린지
- 오블완
- 백준
- TObjectPtr
- IFileDialog
- winapi
- GeeksForGeeks
- DirectX11
- Programmers
- baekjoon
- 줄 세우기
- directx
- RootMotion
- Unreal Engine5
- 프로그래머스
- softeer
- Effective C++
- const
- Today
- Total
Game Develop
'값에 의한 전달'보다는 '상수객체 참조자에 의한 전달' 방식을 택하는 편이 대게 낫다. 본문
참조자로 전달하는게 대개 나은 이유중 대표적인 이유가, 값에 의한 전달을 하면 복사비용이 크기 때문이다.
아마 이정도는 조금이라도 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& 이런식으로 넘겨받는게 이득이다.
'C++ > Effective C++' 카테고리의 다른 글
| 객체복사 할 때는 빠짐없이 복사하자. (0) | 2025.11.14 |
|---|---|
| operator= (대입연산자) 에서 자기대입에 대한 처리가 빠지지 않도록 하자. (0) | 2025.11.12 |
| 객체 생성 및 소멸과정중에는 절대로 가상함수를 호출하면 안된다. (0) | 2025.11.12 |
| 불필요한 복사생성자, 복사대입연산자 호출을 미리 막아보자. (0) | 2025.03.01 |
| 객체를 사용하기 전에 반드시 그 객체를 초기화하자. (0) | 2025.02.18 |
