참조자를 왜 반환해도 되지 않나?
매개변수가 참조자이고, 그 참조자를 반환하는 경우에는 상관이 없다. 하지만, 함수 내부에서 선언된 객체의 경우에는 크게 잘못 된다.


이유는 어디에 있나?
.. RAII 방식을 이해 했다면 그 이유를 알수 있을 듯 하지만, 설명하자면, 스택에 올라간 객체는 존재 할수 있는 범위(Scope)가 있다.  함수 내부에 선언(스택에 올려진)된 객체의 경우, 함수 종료 후 전기적 쇼크로 날라 간다. 그러므로 안에 있던 객체를 참조자로 리턴하게 되면 큰일난다.


그러면, 생성되고 소멸되는 객체를 어떻게 최적화 시키나?
리턴 타입을 임시객체 형태로 하기만 하면, 컴파일러가 알아서 처리해 준다. 이런 방법은 많은 컴파일러 회사들이 지원하고 있으며, 흔히들 "RVO(return value optimization) : 반환 값 최적화"라 한다.



이것만은 잊지 말자!
1. 스택에 올라가는 객체는 Scope가 있다는것을 잊지 말자.



관련 링크
http://redinlife.egloos.com/1625094
http://kldp.org/node/51843
http://ikpil.tistory.com/325
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요