A. 모던 C++
1. 오른값 참조
a. 오른값이란?
🌟 변수나 표현식이 임시로 생성되거나 값을 가지고 있는 객체인 경우를 가리키는 용어
- C++의 이동(Move) 세마틱스와 관련
- 이동을 통해 자원 소유권을 효율적으로 이전함
- 효율적인 자원 관리와 더 나은 성능을 제공
b. 좌변값 VS 오른값
- 좌변값 L-value : 변수나 표현식이 메모리 주소를 가지며, 해당 주소에 값이 할당될 수 있는 객체
- 오른값 R-value : 할당될 수 있는 값을 가진 표현식 또는 객체. L-value가 아닌 나머지
- 주로 이동 가능한 객체가 취급됨 (임시 객체나, 리터럴 상수, 함수 호출의 반환 값)
c. 이동 세마틱스
🌟 객체의 데이터나 자원을 복사하는 대신 이동(move)하여 성능을 향상시키는 기술
➡ 임시 객체나 동적으로 할당된 자원을 가진 객체의 효율적인 관리를 가능하게 함
1) 복사 생성자
객체를 다른 객체로 복사할 때 호출되는 생성자
객체를 인자로 받는 함수에 전달하거나, 함수의 반환 값으로 객체를 반환할 때 호출
객체의 내용을 복사하여 새로운 객체를 생성
2) 이동 생성자
객체의 내용을 실제로 이동
오른값 참조를 사용하여 호출되며, 이동 연산을 수행하기 위한 적절한 자원 이전 로직을 구현해야 함
👉 이동 세마틱스는 이동 생성자를 적절히 정의하여 객체의 복사 비용을 최소화하고 성능을 향상
특히 동적으로 할당된 자원을 가진 객체를 반환하는 함수나 컨테이너의 요소를 조작할 때 더 좋다
d. 객체의 복사와 참조
위에서 생성한 Knight 클래스를 다른 함수로 넘겨준다고 하면..
1) 복사버전 : 데이터가 많으면 비효율적인 방식
2) 왼쪽참조 : 원본을 넘겨주고 수정하는 방식
위 에러메세지에도 표시되듯, const 가 아닌 참조에 대한 초기값은 왼쪽값, 즉
변수나 표현식이 메모리 주소를 가지며, 해당 주소에 값이 할당될 수 있는 객체여야 하는데
임시객체이니 들어가지 못함
3) const 왼쪽참조 : 원본을 넘겨주지만 수정할 수 없는 방식
4) 오른값 참조 : 원본을 넘겨주고 더이상 원본을 활용하지 않으니 알아서 사용하기
&& : 오른값 참조라는 뜻
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버 |
Rookiss | 어디부터 시작할지 막막한 게임 프로그래밍 입문자를 위한 All-In-One 커리큘럼입니다. C++, 자료구조/알고리즘, STL, 게임 수학, Windows API, 게임 서버 입문으로 이어지는 알찬 커리큘럼으로
www.inflearn.com
'프로그래밍 언어 > C++' 카테고리의 다른 글
[게임 프로그래머 입문 올인원] 모던 C++ 스마트 포인터 : weak_ptr (84강) (0) | 2024.03.30 |
---|---|
[게임 프로그래머 입문 올인원] 모던 C++ 스마트 포인터 : shared_ptr (83강) (0) | 2024.03.30 |
[게임 프로그래머 입문 올인원] 모던 C++ : 멀티바이트와 유니코드(81강) (0) | 2024.03.30 |
[게임 프로그래머 입문 올인원] 모던 C++ : std::string (80강) (0) | 2024.03.30 |
[게임 프로그래머 입문 올인원] STL Algorithms : 기본정렬 (78강) (0) | 2024.03.28 |