3월 22, 2016

move semantic 구현

move constructor와 move assignment operator를 정의

move constructor를 정의

  • move constructor
  • move constructor의 경우moved-to-obj의 리소스를 해제하고 그 자리에 move-from-obj의 리소스를 배정. move-from-obj의 리소스 참조를 끊어줌.(ex. pointer를 nullptr로 변경)

  • move assignment operator
  • move-to-obj와 move-from-obj가 동일한 객체인지 검사하고 동일하지 않은 객체일 경우 이동 작업을 진행.



코드의 간략화

move assignment operator를 이용해 move constructor의 중복 코드를 제거할 수 있음.


기타

  • move constructor의 move-from-obj destruct
  • 일반적으로, move constructor에서 move-from-obj를 destruct 해주지는 않음. 그러나 move constructor가 불린 후 꼭 move destructor가 뒤따라 불리는데, 이건 move constructor가 move-from-obj를 destruct해서가 아니라 함수에서 임시로 생성됐던 객체가 move constructor가 불린 후 life time이 끝나 해제가 된 것. move constructor에서 move-from-obj의 destruct해야할 어떤 책임도 없음.


rvalue를 param.로 받는 함수를 overloading.

perfect forwarding?


references

댓글 없음:

댓글 쓰기