이글루스 로그인


temporary object (임시 객체)를 알아보자

 
http://www.thescripts.com/forum/thread129620.html 참조

임시 객체란 ?

1. 객체 이름없이 클래스명을  함수의 인자를 넘길떄 생깁니다.

==> 오늘의 강조점은 사실 이부분 입니다.

int main()
{
std::vector<int> x;
x.swap(std::vector<int>());  //--> 임시 객체가 생성됩니다.
return 0;
}


2. 함수의 리턴값으로 객체를 넘길떄 임시 객체가 생길수 있습니다.

std::vector<int> get()
{
return std::vector<int>();
}

int main()
{
std::vector<int> x;
x.swap(get());
return 0;
}

이 두 경우 컴파일을 해보면 알겠지만 x.swap() 함수 호출은 되지 않습니다.

왜냐 임시 객체는 오로지 상수 참조로만 참조 되기 떄문입니다.

( "Standard C++ doesn't allow a reference to non-const to be bound to a temporary object.")

해결 방법으로는 std::vector<int>().swap(x); 처럼 쓰면 되겠습니다.

간혹 가다 임시 객체를 사용하면서 생기는 혼란과... '클래스 이름에 ()' 형태의 혼란에 지금 글을 보시고...

의문을 푸시기 바랍니다.


그럼...
 

by Gerald | 2007/03/30 15:54 | C++/STL/Boost/ | 트랙백 | 덧글(0)

트랙백 주소 : http://kicom95.egloos.com/tb/1058151
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글


◀ 이전 페이지          다음 페이지 ▶