최근에 공부를 하던 중 교수님게서 C++ lock guard의 특정 동작에서 발생하는 버그를 말씀해주시면서 임시 객체라는 표현이 등장했다.
임시 객체라는 표현이 들어본 것 같으면서도 정확히 뭔지는 모르고 있다는 생각이 들었다.
예상하기론 다른 동작을 위해 생성되어 잠시 동안만 존재하고 희생적으로 사용되는 객체일 수 있겠다는 추측을 했다.
추측을 하고 났으니 이제 정확한 개념에 대해서 알아보자.
임시 객체는 실행 도중에 잠깐만 사용되는 객체이다. 소스 코드에도 없는 힙 이외의 공간에 생성된다고 한다.
그런데 임시 객체는 성능 저하를 유발하는 원인이 되기 때문에 Call by reference를 해서 임시 객체를 만들어주지 않는 것이 좋다고 한다. 참고로 이 예제는 C++을 예시로 들어 설명하고 있는 예제를 근거로 말하고 있다.
임시 객체의 특징은 아래와 같다.
1. 임시객체는 주소 연산자로 주소를 구할 수 없다.
2. 임시객체는 Lvalue 가 될 수 없다.
3. 임시객체는 일반적인 참조가 불가능하다. 하지만 상수 참조는 가능하다고 한다.
4. 임시객체는 다음 행으로 넘어가면 바로 소멸된다고 한다. 그러나 참조자에 참조되는 임시객체는 예외라고 한다.
대충 내용을 알아보니 임시객체라는 개념이 주로 C++에 등장하는 개념인 것 같다. 또한 성능 최적화를 할때 고려하는 대상인걸 보아하니 개념적인 면이 강한 것 같다. 컴파일러가 만들어내는 대상인 것 같고 일반적으로 코드를 작성하면서 고려하는 대상은 아닌 것 같다. 최적화 및 컴파일러의 동작을 염두에 둘때 고려해야하는 대상인 것 같다.
재밌는 개념인 것 같다. 역시나 컴파일러가 개발자보다 많은 일을 하는구나. 화이팅.
아래 블로그에서 많은 내용을 찾을 수 있었다. 감사합니다.
https://vansoft1215.tistory.com/m/27
'C & C++ > C++' 카테고리의 다른 글
[C++] Visual Studio 2022 에서 C++ rapidjson 사용하기 (0) | 2022.11.08 |
---|---|
[C++] C++ 헷갈리는 개념 간단 정리 (1) (0) | 2022.11.07 |
[C++] C++ 에도 annotation이 존재할까? (0) | 2022.01.03 |
[C++] 마이크로소프트 c++ 도큐먼트 (0) | 2021.04.19 |
[C++] C++ book 로드맵 (0) | 2020.11.21 |