• 티스토리 홈
starryeye
  • 프로필사진
    starryeye
    • 분류 전체보기 (189)
      • C++ (17)
      • Java (24)
      • OOP (5)
      • Spring Reactive Stack (12)
        • Reactive Streams (3)
        • Netty (4)
        • Reactor (1)
        • Webflux (3)
        • DB, Cache 연동 (1)
      • Spring (90)
        • Core (17)
        • MVC (33)
        • Client (2)
        • Security (4)
        • DB, Cache 연동 (33)
      • DataBase (12)
        • RDBMS (2)
        • NoSQL (10)
      • Message Broker (6)
      • Web (4)
      • Network (4)
      • 대규모 시스템 설계 (15)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [Modern C++ 정리] Temporary 4
        2022년 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일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바

        단축키

        내 블로그

        내 블로그 - 관리자 홈 전환
        Q
        Q
        새 글 쓰기
        W
        W

        블로그 게시글

        글 수정 (권한 있는 경우)
        E
        E
        댓글 영역으로 이동
        C
        C

        모든 영역

        이 페이지의 URL 복사
        S
        S
        맨 위로 이동
        T
        T
        티스토리 홈 이동
        H
        H
        단축키 안내
        Shift + /
        ⇧ + /

        * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.