함수의 반환형이 클래스이고, 함수가 값을 반환할 때, 메모리 공간에 임시로 객체를 생성하여 반환을 받는 쪽이 참조할 수 있도록 한다. 이를 임시 객체라고 한다.
임시 객체는 개발자가 다음과 같은 형식으로 직접 선언할 수도 있다.
Temporary(200); //클래스명(생성자에게 전달할 인자); 형식
외부에서 객체의 멤버함수를 호출하기 위해 필요한 것은 다음 세 가지 중 하나이다.
- 객체에 붙여진 이름
- 객체의 참조 값(객체 참조에 사용되는 정보)
- 객체의 주소 값
임시객체가 생성된 위치에는 임시객체의 참조 값이 반환되므로, 다음과 같이 임시객체의 멤버함수에 접근할 수 있다.
Temporart(200).ShowTempInfo(); //(임시객체의 참조 값).ShowTempInfo();
//SimpleFuncObj는 객체를 반환 -> 해당 위치에 임시 객체의 참조값을 생성
SimpleFuncObj(obj).AddNum(30);
임시 객체는 다음과 같은 특징을 가진다.
- 임시 객체는 다음 행으로 넘어가면 바로 소멸되어 버린다. 이후에 임시 객체를 참조할 수단이 없기 때문이다.
- 참조자에 의해 참조되는 임시객체는 바로 소멸하지 않는다.
2번 특성에 의하여, 아래 예제는 다음과 같이 해석된다.
SoSimple tempRef = SimpleFuncObj(obj);
위 예제는 다음과 같이 오인되기 쉽다.
-> tempRef라는 새로운 객체를 생성해서, 반환되는 객체를 가지고 대입연산(복사)를 진행한다.
하지만 실제 구문은 다음과 같이 해석된다.
-> 추가로 객체를 생성하지 않고, 반환되는 임시 객체에 tempRef라는 이름을 할당한다. 이는 객체의 생성 수를 하나 줄여서 효율성을 높이기 위해서이다.
참고자료