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만을 받을 수 있다.




이 블로그의 인기 게시물

내일배움캠프 사전캠프 - 사전캠프설 연휴 커피 파밍 이벤트 작품 [ EXTREMITY ]

내일배움캠프 29일차 - 커리어데이 2일차 : 클라이언트 프로그래머로서 포트폴리오, 입사준비팁