이동 생성자 및 이동 대입 연산자

2022. 2. 19. 19:23·C++

값의 분류(대표적)

1. lvalue

지속적으로 유지되는 개체

2. rvalue

lvalue가 아닌값, 일시적인 값 ex) 람다

 

rvalue 참조 (&&)

- 임시적인 값을 참조로 쓰겠다.

- C++11이후 나옴

- 기능상 &연산자와 비슷

- & 연산자 -> lvalue 참조, &&연산자 -> rvalue 참조

 

std::move()

- rvalue 참조로 반환

- lvalue를 rvalue로 변환

 

이동 생성자

<class_name>::<class_name>(<class_name>&&)

- 다른 개체 멤버 변수들의 소유권을 가져 옴

- 복사 생성자와 달리, 메모리 재할당 x

- 복사 생성자보다 빠름

- 약간 얕은 복사와 비슷하다.

-> Mystring::MyString(MyString&& other) {...}

 

rvalue 최적화

- 이동 생성자와 이동 대입 연산자

=> 아직 쓰임(유니크 포인터, move)

- 포인터 대신 개체 자체를 반환하는 함수

-> 함수에서 rvalue를 반환하는 것이 실제로는 매우 느림

-> 반환 값 최적화(Return Value Optimization)라고 하는 컴파일러 최적화를 깨기 때문

=> 자세한 것은 Named RVO 검색

-> 그래서 그냥 쓰는 방식(lvalue)를 쓰자 대신,

1. 반환 값 최적화가 안되는 경우

2. 너무 느려서 특정 함수가 rvalue가 더 빠른 경우

같은 경우만 rvalue를 반환하도록 사용하자

저작자표시 (새창열림)

'C++' 카테고리의 다른 글

람다 식(Lambda Expression)  (0) 2022.03.03
C++ constexpr  (0) 2022.03.02
C++ 스마트 포인터  (1) 2021.12.28
C++ STL  (0) 2021.12.27
C++ 새로운 자료형  (0) 2021.12.26
'C++' 카테고리의 다른 글
  • 람다 식(Lambda Expression)
  • C++ constexpr
  • C++ 스마트 포인터
  • C++ STL
숯불돼지왕갈비
숯불돼지왕갈비
  • 숯불돼지왕갈비
    게임 개발 공부기
    숯불돼지왕갈비
  • 전체
    오늘
    어제
    • 분류 전체보기 (297)
      • 학교수업 (165)
      • 취업강의 (6)
      • C++ (47)
        • 코딩 테스트 (3)
      • Unreal Engine 5 (25)
        • MMORPG 개발 (25)
      • Unreal Engine 4 (44)
        • Omak Project (3)
        • Unreal Engine 4 개발일지 (9)
        • Unreal Engine 4 (32)
      • Unity (1)
        • 개발 일지 (1)
      • 수학 (3)
        • 소프트웨어 공학용 수학 (3)
      • DirectX 11 (1)
      • 게임 디자인 패턴 (2)
      • 포트폴리오 (1)
      • 자격증 (1)
        • 정보처리기사 (0)
        • SQLD (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
숯불돼지왕갈비
이동 생성자 및 이동 대입 연산자
상단으로

티스토리툴바