티스토리 뷰

언어

C++ 이동 시맨틱

jazzmaster 2019. 6. 6. 18:04

면접대비용으로 정리한거라 남들이 보기에 다소 두서 없을 수 있음 참고바람

 

 

 

1. 이동 시맨틱은 이동 생성자, 이동 대입 연산자를 통해 지원함.

   이동 생성자, 이동 대입 연산자는 원본 객체 --> 새로운 객체로 복사 --> 원본 null로 초기화 의 과정이다.

   즉 객체에 대한 메모리 소유권을 이동함. 그 결과 댕글링 포인터나, 메모리 릭 발생을 예방함.

 

2. 이동 시맨틱은 r-value 참조로 구현됨. 

내가 어떤 클래스를 구현했고, 그 클래스가 이동 시맨틱으로 동작하게 하려면 위에서 언급한 

 

 

1
2
3
4
5
6
class LiverPool
{
    public:
        LiverPool(LiverPool&& val) noexcept;   // move construtor
        LiverPool& operator=(LiverPool&& val) noexcept;   // move assignment
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
" target="_blank" style="text-decoration:none; color:white">

 

 

 

 

3. 왜 사용 하는가? 

불필요한 복사를 하지 않아서. 메모리 할당의 횟수를 줄일 수 있다.

 

4. 어떤 상황에서 사용하는가?

첫번째 컨테이너에 담을 때

가령 벡터에 객체를 담을때 벡터는 동적으로 확장을 하는데, 객체에 이동 시맨틱을 정의 및 구현하면 

확장시 복제 대신 이동이 일어나서 불필요한 복사를 방지한다. 이게 몇번 안하면 상관 없을수도 있으나

수천번 수만번을 한다면 분명 큰 오버헤드이다.

 

두번째 임시 객체를 리턴할 때, 임시 객체는 함수 리턴후에 소멸하는데, 일반 복제 대입 연산 대신 이동 대입 연산을

호출한다.

 

 

기타 등등

 

 

 

 

 

 

 

 

1
2
3
4
5
6
7
8
9
   

 

 

 

 

 

 

 

 

 

 

 

 

'언어' 카테고리의 다른 글

C++ 초기화  (0) 2019.06.06
C++ 타입 그리고 캐스팅 방법  (0) 2019.06.06
C++ 아주 헷갈리는 const 키워드  (0) 2019.06.06
C++ 참조 정리  (0) 2019.06.06
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함