2007년 03월 30일
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); 처럼 쓰면 되겠습니다.
간혹 가다 임시 객체를 사용하면서 생기는 혼란과... '클래스 이름에 ()' 형태의 혼란에 지금 글을 보시고...
의문을 푸시기 바랍니다.
그럼...
임시 객체란 ?
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 | 2007/03/30 15:54 | C++/STL/Boost/ | 트랙백 | 덧글(0)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]