본문 바로가기
C++

임시 객체에 대하여....

by 상레알 2009. 2. 16.

실행 도중에 잠깐만 사용되는 객체, 사용자 모르게 이름도 없이 사용되는 객체,
소스 코드에도 없는 힙 이외의 공간에 생성되는... 이것이 임시 객체이다.

임시 객체는 코드 수행을 위해 컴파일러가 만들어내는 말 그대로 임시 객체이며,
임시 객체가 사용될 때에는 반드시 임시 객체의 생성과 소멸이라는 비용이 뒤따른다.

일반적으로 임시 객체가 생성되는 경우는 다음과 같이 크게 두 가지로 나눌 수 있다.

1. value 또는 const & 형식으로 함수에 전달되는 객체의 타입과 바인딩되어야 하는
(원래 함수 선언에 들어 있는) 매개변수의 타입이 다를 때.

2. 함수의 반환값이 value 일 때.


size_t coutCh(const string &str, char ch);        // 특정 ch의 개수 반환 함수
char buffer[] = "Korea";
countCh(buffer);                                                // 아래 설명.

위 countCh(buffer); 수행시 함수 시그너쳐는 const string& 타입을 받게 되어 있지만,
넘어가는 매개변수는 char array 이므로 컴파일러는 친절핟게 string 타입의 임시 객체를 만들어준다.
이 때 임시 string이 생성되고, countCh() 함수가 종료되면 임시 string이 소멸되는 것이다.

const &가 아닌, 비상수 reference 매개변수에서는 위와 같은 임시 객체가 생성되지 않는다.
당연한 것 아닌가? 고쳐야 하는게 임시 객체가 아니라 원본인 것을...
따라서 const &가 아닌 비상수 reference는 타입 불일치시 컴파일러가 에러를 토해내게 되어 있다.


'C++' 카테고리의 다른 글

C++ 예외 처리  (0) 2009.02.18
use of class template requires template argument list ->컴파일 에러  (0) 2009.02.18
클래스 템플릿!  (0) 2009.02.18
함수 템플릿!!!  (0) 2009.02.17
string 클래스 디자인  (0) 2009.02.16
oop 프로젝트 8단계 중...  (0) 2009.02.12
배열의 인덱스 연산자 오버로딩  (0) 2009.02.10
cout / cin / endl 에 대하여...  (0) 2009.02.10
단항 연산자의 오버로딩  (0) 2009.02.09
연산자 오버로딩  (0) 2009.02.06