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 |