함수의 반환형이 클래스이고, 함수가 값을 반환할 때, 메모리 공간에 임시로 객체를 생성하여 반환을 받는 쪽이 참조할 수 있도록 한다. 이를 임시 객체라고 한다.

임시 객체는 개발자가 다음과 같은 형식으로 직접 선언할 수도 있다.

 
Temporary(200); //클래스명(생성자에게 전달할 인자); 형식
 

외부에서 객체의 멤버함수를 호출하기 위해 필요한 것은 다음 세 가지 중 하나이다.

  1. 객체에 붙여진 이름
  2. 객체의 참조 값(객체 참조에 사용되는 정보)
  3. 객체의 주소 값

임시객체가 생성된 위치에는 임시객체의 참조 값이 반환되므로, 다음과 같이 임시객체의 멤버함수에 접근할 수 있다.

 
Temporart(200).ShowTempInfo(); //(임시객체의 참조 값).ShowTempInfo();
 
 
//SimpleFuncObj는 객체를 반환 -> 해당 위치에 임시 객체의 참조값을 생성
 
SimpleFuncObj(obj).AddNum(30);
 

임시 객체는 다음과 같은 특징을 가진다.

  1. 임시 객체는 다음 행으로 넘어가면 바로 소멸되어 버린다. 이후에 임시 객체를 참조할 수단이 없기 때문이다.
  2. 참조자에 의해 참조되는 임시객체는 바로 소멸하지 않는다.

2번 특성에 의하여, 아래 예제는 다음과 같이 해석된다.

 
SoSimple tempRef = SimpleFuncObj(obj);
 
위 예제는 다음과 같이 오인되기 쉽다.
-> tempRef라는 새로운 객체를 생성해서, 반환되는 객체를 가지고 대입연산(복사)를 진행한다.
하지만 실제 구문은 다음과 같이 해석된다.
-> 추가로 객체를 생성하지 않고, 반환되는 임시 객체에 tempRef라는 이름을 할당한다. 이는 객체의 생성 수를 하나 줄여서 효율성을 높이기 위해서이다.

참고자료

윤성우의_열혈_cpp_프로그래밍