l-value, r-value 

l-value = 메모리 주소를 가질 수 있는 값 ( 변수, 객체 )

r-value = 메모리 상에서 주소를 가지지 않는 값 (임시 값, 임시 객체, 연산 값)

 

r-value reference

ㄴ 임시 객체로 곧 사라져야하지만 그 전에 생성된 값을 복사하지 않고 이동 시킨다. (불필요한 복사 방지)

 

클래스에서 이동 생성자 구현 예시

class TempClass
{
public:
    TempClass()
    {
    }

    TempClass(int value)
    {
        _temp = new int(value);
    }
    ~TempClass() {}

    TempClass(TempClass&& rhs)
    {
        cout << "이동 생성자 호출" << endl;
        _temp = rhs._temp;

        rhs._temp = nullptr;
    }

private:
    int* _temp = nullptr;
};

int main()
{
    // 기본 자료형에 대한 r-value 참조
    int x = 10;           
    int& lref = x;        
    int&& rref = 20;      

    // 클래스에서의 r-value 참조로 소유권을 이전
    TempClass tempA(5);

    TempClass tempB(std::move(tempA));
   
	return 0;
}

 

std::move

ㄴ l-value를 r-value로 캐스팅 해준다.

 

std::move()를 통해 소유권을 넘기겠다라는 의도를 전할 수 있다.

 

 

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

<vector>  (0) 2023.07.02
Template  (0) 2023.07.01
30. 변환 생성자  (0) 2023.06.20
29. 복사 생성자  (0) 2023.06.19
27. 클래스 생성자와 소멸자  (0) 2023.06.18