C & C++/C++

[C++] 임시 객체란 무엇인가? Temporary Object?

Razelo 2022. 10. 19. 14:57

최근에 공부를 하던 중 교수님게서 C++ lock guard의 특정 동작에서 발생하는 버그를 말씀해주시면서 임시 객체라는 표현이 등장했다. 

 

임시 객체라는 표현이 들어본 것 같으면서도 정확히 뭔지는 모르고 있다는 생각이 들었다. 

 

예상하기론 다른 동작을 위해 생성되어 잠시 동안만 존재하고 희생적으로 사용되는 객체일 수 있겠다는 추측을 했다. 

 

추측을 하고 났으니 이제 정확한 개념에 대해서 알아보자. 


임시 객체는 실행 도중에 잠깐만 사용되는 객체이다. 소스 코드에도 없는 힙 이외의 공간에 생성된다고 한다. 

 

그런데 임시 객체는 성능 저하를 유발하는 원인이 되기 때문에 Call by reference를 해서 임시 객체를 만들어주지 않는 것이 좋다고 한다. 참고로 이 예제는 C++을 예시로 들어 설명하고 있는 예제를 근거로 말하고 있다. 

 

임시 객체의 특징은 아래와 같다. 

 

1. 임시객체는 주소 연산자로 주소를 구할 수 없다.

2. 임시객체는 Lvalue 가 될 수 없다. 

3. 임시객체는 일반적인 참조가 불가능하다. 하지만 상수 참조는 가능하다고 한다. 

4. 임시객체는 다음 행으로 넘어가면 바로 소멸된다고 한다. 그러나 참조자에 참조되는 임시객체는 예외라고 한다. 

 

대충 내용을 알아보니 임시객체라는 개념이 주로 C++에 등장하는 개념인 것 같다. 또한 성능 최적화를 할때 고려하는 대상인걸 보아하니 개념적인 면이 강한 것 같다. 컴파일러가 만들어내는 대상인 것 같고 일반적으로 코드를 작성하면서 고려하는 대상은 아닌 것 같다. 최적화 및 컴파일러의 동작을 염두에 둘때 고려해야하는 대상인 것 같다. 

 

재밌는 개념인 것 같다. 역시나 컴파일러가 개발자보다 많은 일을 하는구나. 화이팅. 

 

아래 블로그에서 많은 내용을 찾을 수 있었다. 감사합니다. 

https://vansoft1215.tistory.com/m/27

 

[문과 코린이의 IT 기록장] C,C++ - 임시객체(임시객체 기초, 임시객체 정의, 임시객체 특징, 임시객

 [문과 코린이의 IT 기록장] C,C++ - 임시객체(임시객체 기초, 임시객체 정의, 임시객체 특징, 임시객체 사례)  1. 임시객체 기초 임시객체란? : 실행 도중에 잠깐만 사용되는 객체로, 소스

vansoft1215.tistory.com

 

반응형