언어/C

move semantics

조규현15 2015. 11. 25. 16:22
반응형

카테고리는 c++11에 해당되는 내용임.


여러 의미가 있지만 처음 이해한 것은

실제 함수를 호출하는 과정에서 우리는 파라미터에 변수를 생성하고 사용하게 된다.

이 때, 일반적인 파라미터는 지역변수를 생성하고 값-복사를 하게되고

이것을 막기위해서는 const를 사용하여 불필요한 작업을 줄일 수 있다.

(복사 생성자가 호출되지 않음)


하지만 생성자를 통한 값 이동은 어쩔수 없이 내부적으로 복사 생성자가 불려져야 한다.

이 경우는 사실상 불필요하기 때문에 이것을 최적화하는 방법이 있다.

컴파일러에서 최적화를 지원하거나 c++11부터 지원하는 move semantics를 사용하는 것이다.


move semantics는 rvalue reference를 인자로 받는 새로운 생성자로

파라미터에 &&를 작성하면 된다.

이동 생성자(move semantics)와 복사 생성자의 차이점은 rvalue reference의 내부 변수를 그대로

사용한다는 점이다.

따라서, 복사 생성자가 불렸을 때와 달리 불필요한 메모리 할당/해제(지역변수)가 사라지게 된다.


c++을 헛공부했다는 생각도 들면서 좀더 깊이 공부할 필요를 느꼈다.

역시 겉만 알고 쓴다는것은 위험하다는 사실도 알았다ㅜ


참고 : http://bunhere.tistory.com/410

참고 : http://wonderfuldream.tistory.com/345

반응형

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

swap 매크로  (0) 2015.06.28
c에서 pointer와 swap의 관계  (0) 2015.06.28
MFC Image Viewer  (0) 2015.02.09
file 복사 프로그램  (0) 2015.01.30
c File IO  (0) 2015.01.30