- [Modern C++ 정리] Temporary 42022년 09월 06일
- starryeye
- 작성자
- 2022.09.06.오후10:47
반응형반환되는 temporary에 대해 알아보자..
사용되는 class 선언부 이다.
전역 변수로 Point 객체를 선언하였다. (line 26)
f1()함수는 리턴되는 타입이 Point 로 선언되어있다.
-> 리턴용으로 pt가 복사되어 반환된다.
-> 이때 반환되는 객체는 임시 객체이다.
f2()함수는 리턴되는 타입이 Point& 로 선언되어있다.
-> 참조를 반환하여 전역변수 pt 그 자체를 반환한다.
f3() 함수는 f2() 함수와 마찬가지로 Point&를 반환한다.
하지만..
내부를 보면, 이름있는 지역 변수 객체 p를 참조로 반환 중이다.
지역변수는 f3()함수 블럭이 끝나는 순간 파괴된다.
따라서..
p 객체 그 자체를 반환하는데... 함수를 벗어나자마자 파괴 되므로
말이 안되는 상황이다.
결론.
F.43: Never (directly or indirectly) return a pointer or a reference to a local object
참조 반환은 "전역변수, 맴버 데이터, *this, static 지역" 처럼
파괴 되지 않는 것만 사용해야 한다.
main() 함수를 살펴 보자..
f1() 함수는 복사된 임시 객체가 리턴 되는데..
임시 객체는 rvalue로 등호 왼쪽에 올 수 없으므로 51 line 은 error 이다.
f2()는 전역변수 참조를 리턴하므로 lvalue로 등호 왼쪽에 올 수 있다.
반응형'C++' 카테고리의 다른 글
[Modern C++ 정리] Temporary 6 (0) 2022.09.06 [Modern C++ 정리] Temporary 5 (0) 2022.09.06 [Modern C++ 정리] Temporary 3 (0) 2022.09.06 [Modern C++ 정리] Temporary 2 (0) 2022.09.05 [Modern C++ 정리] Temporary 1 (0) 2022.09.05 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)