C++/Modern C++(11, 14, 17, 20)
[C++11] Move Semantics
deulee
2023. 8. 28. 16:13
"Move Semantics(이동 의미론)"은 C++11로부터 도입된 핵심적인 개념으로, 객체의 "소유권"을 전환하거나 "전달"하는 방식을 나타낸다.
이는 C++에서 더 효율적인 객체 복사와 동적 자원 관리를 가능하게 해준다.
"Move Semantics"를 이용하면 임시 객체나 rvalue로부터 객체의 리소스를 효율적으로 이동시켜 새로운 객체를 생성하거나 기존 객체에 리소스를 할당할 수 있다. 이를 통해 복사 대신 리소스의 소유권을 이전함으로써 성능을 최적화시킬 수 있다.
특히, 동적 메모리 할당과 같이 무거운 작업에서 효율적이다.
그럼 주로 어디에서 사용할까?
- 객체의 수명이 다할때
- 객체가 일시적으로 사용될 때
- `std::move`로 인해 명시적으로 호출될 때
보통 이 세 가지 상황에서 사용되는데 다음의 예시를 들도록 하겠다.
`std::vector`의 경우 "이동"을 하게 되면 단순히 몇개의 포인터를 복사하고 내부의 상태를 새로운 벡터에 넘기게 될 것이다. 하지만 "복사"를 하게 된다면 벡터의 포함되어 있는 모든 요소를 일일이 복사하게 될 것이다. 어차피 기존의 객체는 곧 파괴될텐데 말이다.
또한, 복사가 불가능한 타입 (`std::unique_ptr`)과 같은 타입도 이동이 가능하게 해준다.
이를 코드로 이용한 내용은 다음 글을 참고하자.
https://deulee.tistory.com/121
https://deulee.tistory.com/101