반응형
카테고리는 c++11에 해당되는 내용임.
여러 의미가 있지만 처음 이해한 것은
실제 함수를 호출하는 과정에서 우리는 파라미터에 변수를 생성하고 사용하게 된다.
이 때, 일반적인 파라미터는 지역변수를 생성하고 값-복사를 하게되고
이것을 막기위해서는 const를 사용하여 불필요한 작업을 줄일 수 있다.
(복사 생성자가 호출되지 않음)
하지만 생성자를 통한 값 이동은 어쩔수 없이 내부적으로 복사 생성자가 불려져야 한다.
이 경우는 사실상 불필요하기 때문에 이것을 최적화하는 방법이 있다.
컴파일러에서 최적화를 지원하거나 c++11부터 지원하는 move semantics를 사용하는 것이다.
move semantics는 rvalue reference를 인자로 받는 새로운 생성자로
파라미터에 &&를 작성하면 된다.
이동 생성자(move semantics)와 복사 생성자의 차이점은 rvalue reference의 내부 변수를 그대로
사용한다는 점이다.
따라서, 복사 생성자가 불렸을 때와 달리 불필요한 메모리 할당/해제(지역변수)가 사라지게 된다.
c++을 헛공부했다는 생각도 들면서 좀더 깊이 공부할 필요를 느꼈다.
역시 겉만 알고 쓴다는것은 위험하다는 사실도 알았다ㅜ
반응형
'언어 > 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 |