함수에서 반환되는 임시 객체

porawon의 이미지

class Temp
{
};
 
Temp foo()
{
return Temp();
}
 
int main()
{
const Temp& temp = foo();
}

위의 코드에서 foo 함수가 임시객체를 반환하게 되는데 이 임시객체는 메모리 상에서 어디에 저장되나요?
foo 함수의 스택에 저장되면 함수 콜 이후에 소멸되서 위의 main 함수와 같은 코드는 사용할 수 없을 거 같은데 컴파일이 되서 질문드립니다.

klara의 이미지

명세가 없으므로 알 수 없습니다. 말씀하신대로 하면 안되는거가 맞습니다.
C/C++은 컴파일되면 OK인 언어가 아닙니다.
컴파일되도 하면 안되는 게 굉장히 많습니다. 특히 메모리 관련해서는요.

kukyakya의 이미지

http://stackoverflow.com/questions/11560339/returning-temporary-object-and-binding-to-const-reference

사용해도 되는 코드 맞습니다.

foo()가 반환하는 Temp는 main함수의 스택에 생성되겠죠.

porawon의 이미지

도움 많이 됐습니다. const 참조자만 가능하군요.