"Move Semantics(이동 의미론)"은 C++11로부터 도입된 핵심적인 개념으로, 객체의 "소유권"을 전환하거나 "전달"하는 방식을 나타낸다.
이는 C++에서 더 효율적인 객체 복사와 동적 자원 관리를 가능하게 해준다.
"Move Semantics"를 이용하면 임시 객체나 rvalue로부터 객체의 리소스를 효율적으로 이동시켜 새로운 객체를 생성하거나 기존 객체에 리소스를 할당할 수 있다. 이를 통해 복사 대신 리소스의 소유권을 이전함으로써 성능을 최적화시킬 수 있다.
특히, 동적 메모리 할당과 같이 무거운 작업에서 효율적이다.
그럼 주로 어디에서 사용할까?
보통 이 세 가지 상황에서 사용되는데 다음의 예시를 들도록 하겠다.
`std::vector`의 경우 "이동"을 하게 되면 단순히 몇개의 포인터를 복사하고 내부의 상태를 새로운 벡터에 넘기게 될 것이다. 하지만 "복사"를 하게 된다면 벡터의 포함되어 있는 모든 요소를 일일이 복사하게 될 것이다. 어차피 기존의 객체는 곧 파괴될텐데 말이다.
또한, 복사가 불가능한 타입 (`std::unique_ptr`)과 같은 타입도 이동이 가능하게 해준다.
이를 코드로 이용한 내용은 다음 글을 참고하자.
https://deulee.tistory.com/121
[C++11] Rvalue references
"Rvalue reference"는 C++11에서 도입된 기능으로 오로지 Rvalue에만 할당될 수 있는 새로운 레퍼런스이다. 이를 선언하는 방법은 다음과 같다. T&& // where T is non-template type parameter (such as int, or a user-defined
deulee.tistory.com
https://deulee.tistory.com/101
[C++11] Special member functions for move semantics
복사 생성자와 복사 대입 연산자는 복사본이 만들어질 때 호출됐었다. 하지만 C++11의 `move semantics`가 생기면서 `move constructor`와 `move assignment operator`를 만들 수 있게 되었다. #include class B { public: st
deulee.tistory.com
[C++11 - library features] std::begin/end (0) | 2023.08.28 |
---|---|
[C++11] Rvalue references (0) | 2023.08.28 |
[C++11] Forwarding References(Universal References) (0) | 2023.08.28 |
[C++11] Variadic templates (0) | 2023.08.28 |
[C++11] Initializer lists (0) | 2023.08.28 |