본문 바로가기

C++

[C++] 오른값 참조(rvalue reference)

int a = 3; 에서 a는 왼값(lvalue), 3은 오른값(rvalue)이다.

왼값이란 단일 식을 넘어 계속 지속되는 개체이고 

오른값이란 왼값이 아닌 나머지이다. (임시 값, 열거형, 람다, i++ 등)

다음은 참조 방법에 대해 알아보자.

 

void Copy_RValueRef(Player&& player){}

 

오른값 참조를 사용할 때는 &을 연속해서 두개 붙인다. 

그러면 rvalue을 참조할 것이며 rvalue는 우리 마음대로 수정이 가능하고 lvalue처럼 지속되지도 않는다.

그래서 위 코드에서 매개변수로 받은 rvalue player을 nullptr로 설정할 수 있다. 

이런 특성 때문에 복사가 아니라 이동이 가능해진다. 

 

void operator=(Player&& player)
{
	//깊은 복사
	//if(player._pet)
        //_pet = new Pet(player._pet);
    //이동
    _pet = player._pet;
    player = nullptr;
}

 

원래는 참조 값을 매개변수로 받으면 깊은 복사를 진행해야 하지만 rvalue를 매개변수로 받으면 

사라질 것을 알기 때문에 얕은 복사가 가능하고 nullptr로 설정할 수 있다. 그래서 복사가 아닌 이동이라고 한다.

데이터를 rvalue로 캐스팅해서 오른값 참조를 사용할 수 있는데 std::move를 사용하면 된다. 

이 함수는 하나만 존재해야 하는 unique_ptr의 이동에도 사용된다.

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

[C++] 전역 변수, 정적 변수, 외부 변수  (0) 2022.12.23
[C++] 람다  (0) 2022.06.25
[C++] 사용하지 않는 함수 삭제하기  (0) 2022.06.25
[C++] enum vs enum class  (0) 2022.06.25
[C++] typedef보다 using을 사용하자.  (0) 2022.06.25