220607) Lvalue, Rvalue, 복사생성자, 이동생성자, Rvalue Reference
Lvalue
: 메모리 주소를 포함하고 있는 값, 일반적으로 변수에 저장되어 표현식 계산 후에도 값을 유지한다.
Rvalue
: 표현식 이후에는 사용되지 않는 일시적인 값, 일반적으로 계산이 종료되면 소멸한다.
복사생성자
: 기존 클래스의 데이터를 복사해서 생성하는 생성자.
: 깊은 복사(Deep Copy)를 통해 복사대상의 포인터 멤버변수 참조값마저도 복사해서 새 포인터에 붙여 넣는다는 특징이 있다.
: STL Vector의 push_back()이 복사생성자의 원리를 활용한다.
: Func(const Func& func) 꼴로 사용한다.
이동생성자
: 클래스의 데이터를 가져와서 생성하는 생성자. 복사생성자와 언뜻 비슷해 보이지만 매개변수 클래스가 가진 포인터 멤버변수의 참조소유권을 대상에게 넘긴다는 차이가 있다. 이동 후의 매개변수 클래스가 가지고 있던 포인터 멤버변수의 참조는 해제된다.
: 얕은 복사(Shallow copy)를 사용하기 때문에 메모리 부담이 적다.
: STL Vector의 emplace_back()이 이동생성자의 원리를 활용한다.
: Func(Func&& func) 꼴로 사용한다.
Rvalue Reference
: 임시적인 값인 Rvalue값을 참조할 수 있게 하는 방법. Lvalue참조에 비해 리소스 이동에 따른 데이터 변질이 일어나지 않는다.
: 자료값 뒤에 &&를 붙여 표현한다. ( 예: int&& a; ) 또한 이동생성자의 매개변수로서 사용되기도 한다.
: 아래와 같이 Lvalue참조가 Lvalue만을 받을 수 있는 것처럼, Rvalue또한 Rvalue만을 받을 수 있다.
