본문 바로가기

반환

(2)
항목 3: 함수 내부에서 선언된 객체를 참조자로 반환 하지 마라! 함수 내부에 선언된 객체는 무엇인가? 말 그대로 함수 내부에서 객체가 선언된것을 뜻한다. 무슨 특징을 가지고 있는가? 객체는 스택에 올라 가게 되고, 자동적으로 존재할수 있는 범위(scope)를 지니게 된다. 왜 이것을 참조자로 반환하면 안되는가? 간단하다. 함수가 리턴되고, 바로 .. 객체는 사라진다. 이때 리턴된 참조자는 유효하고, 참조자가 참조하는 객체는 무효하다. 여기서 문제가 발생된다. 관령링크 http://ikpil.tistory.com/441
항목 21: 함수에서 객체를 반환해야 할 경우에 참조자를 반환하려고 들지 말자. 참조자를 왜 반환해도 되지 않나? 매개변수가 참조자이고, 그 참조자를 반환하는 경우에는 상관이 없다. 하지만, 함수 내부에서 선언된 객체의 경우에는 크게 잘못 된다. 그 이유는 어디에 있나? .. RAII 방식을 이해 했다면 그 이유를 알수 있을 듯 하지만, 설명하자면, 스택에 올라간 객체는 존재 할수 있는 범위(Scope)가 있다. 함수 내부에 선언(스택에 올려진)된 객체의 경우, 함수 종료 후 전기적 쇼크로 날라 간다. 그러므로 안에 있던 객체를 참조자로 리턴하게 되면 큰일난다. 그러면, 생성되고 소멸되는 객체를 어떻게 최적화 시키나? 리턴 타입을 임시객체 형태로 하기만 하면, 컴파일러가 알아서 처리해 준다. 이런 방법은 많은 컴파일러 회사들이 지원하고 있으며, 흔히들 "RVO(return value..